C言語が組み込み開発の主流となったのはなぜか。機械語、アセンブリ言語などとの比較から、C言語が支持される理由を解説しよう。
パソコンは、ソフトウェアがなければ粗大ゴミといわれますが、組み込み機器も同様です。携帯電話や自動販売機などの組み込み機器は、ソフトウェアがなければ、シリコンを主成分とする化学合成物からなる無機質な固まりです。大げさなようですが、この無機物に命を吹き込んでいるのが、組み込みソフトウェアです。そこで今回は、組み込み機器の開発に必要な、ソフトウェアの基礎知識について解説します。
組み込みシステムのソフトウェア開発には、C言語が主に使われています。ここで筆者の独断を述べますが、組み込みソフトウェアを開発するために、C言語を使う必然性はありません。日本ではなじみがないかもしれませんが、ヨーロッパではPL/Iと呼ばれる言語が組み込み機器の開発に利用されています。また日本でも10年くらい前にはPL/Mと呼ばれる言語が使われていて、現在でも一部の機器にはPL/Mで開発されたプログラムが搭載されています。とはいえ現状では、Cが開発言語の主流を占めています。これはなぜでしょうか。理由を探る前に、開発言語の種類を見てみましょう。
機械語は、その名のとおり、機械(マイコン)の言葉です。機械語は、0と1のバイナリまたは16進数で構成されています。マイコンは、機械語の命令を受け入れることにより(マイコン自身を含めたハードウェアが)動作します(逆のいい方をすれば、マイコンは機械語しか理解できません)。
機械語の概念を分かりやく説明するために、人間の言葉に置き換えてみます。地球上には190以上の国と地域があり、それぞれに公用語があります。各国あるいは地域には、公用語以外に、特定の土地でのみ使われる言葉があります。
日本語を例に取ると、いわゆる共通語のほかに方言として東北弁や関西弁、九州弁などがあり、例えば九州弁も博多弁、熊本弁、鹿児島弁などに細分化されます。さらに分類上、鹿児島弁のカテゴリに属していても、お年寄りが使う鹿児島弁は、同じ鹿児島に住む若い人には理解できないなど、言語は多様性に富んでいます。
機械語は、方言の中でも特定の土地で、ある世代のみに使われている言葉に相当します。つまり機械語は、特定のマイコンの特別な機能を実現するレベルまで落とし込まれた記述方法を取るため、たとえ同じファミリのマイコンでも周辺機能が異なれば、機械語の記述方法が異なってきます。従って、普通の人間にとって、マイコン固有の機能を数値(バイナリまたは16進数の羅列)で記述することは難しいため、特別な理由がない限り、機械語でプログラミングすることはありません。
機械語は、あまりにもマシン寄りの表記をしているため、できるだけ人間に理解しやすい表現はないかと考えられてできたのが、アセンブリ言語です。アセンブリ言語は、数値データではなく、英語ベースのテキスト形式で記述できます。これにより、アセンブリ言語は機械語と比較して、人間にとって分かりやすい言語体系となっています。
しかしアセンブリ言語は先ほどの例でいくと、博多弁や熊本弁、鹿児島弁などの方言レベルに相当します。何故かというと、アセンブリ言語の命令セットは、基本的に機械語、つまりマイコンと1対1で対応しているからです。このためアセンブリ言語はマイコンの種類によって、細かい個所で異なった記述方法を取らざるを得ません。
例えば、東京の倉庫にある荷物Aを福岡の倉庫Bに送りたい場合、アセンブリ言語では転送命令MOVを使います(注1)。データ転送はMOV命令で行えますが、マイコンの種類により、記述方法が微妙に異なります。あるマイコンではAからBにデータを転送する場合、以下のように記述します。
MOV A, B
ところが別のマイコンでは、同じ結果を得るために、以下のように記述します。
MOV B, A
このように、マイコンのアーキテクチャ(あるいは設計思想)が異なれば、単純なデータ転送1つを取ってみても、アセンブリ言語ではプログラムの書き方が異なってきます。これは同じ固有名詞を指すのに、方言により表現方法が異なっているのと似ています。
過去現在未来と同じマイコンを使い続けることができる幸せなプログラマは少ないと思います。大部分のプログラマにとって、マイコンが置き換わるたびにリファレンス・マニュアルを読み、マイコン固有の命令セットを理解して、アセンブリ言語でプログラムを書き直していたのでは、日進月歩(秒進日歩?)の組み込み市場において生き残ることは困難になります(注2、注3)。そこで登場するのが、C言語に代表される高級言語です。
Copyright © ITmedia, Inc. All Rights Reserved.