一口に組み込みソフトウェアを開発するといっても、システムのどの部分を担当するかにより、必要な知識は異なります。例えばシリアル通信や液晶パネルなどを制御するデバイスドライバを開発する場合、ハードウェアからソフトウェアまでを含めた組み込みの知識が必須です。デバイスドライバの開発者は、マイコンやハードウェアの機能や特性を可能な限り理解し、最適なプログラムを書く必要があります。
これに対してUI(ユーザーインターフェイス)部分などのアプリケーションを開発する場合、極端な話、組み込みの知識は不要です。アプリケーション開発者は、OSが提供するシステムコールやAPIを使いこなせれば、後は勝手にOSがマイコンやハードウェアを制御してくれます。
とはいえ、小規模なシステムやOS経由においてはタイミングが間に合わないシステムなどでは、アプリケーションプログラムからデバイスを直接制御する場合もあります。このようなとき、アプリケーション開発者といえども、マイコンやハードウェアの知識が要求されます。そこで今回は、組み込みソフトウェアを開発するために最低限必要な知識を解説します。
⇒ 連載バックナンバーはこちら
マイコンという名称は、便利な呼び方です。厳密な用語の定義は難しいのですが、ここでは“組み込みシステムを制御するために中核となる半導体チップ”を総称してマイコンと呼びます。マイコンの分類方法にはいろいろとありますが、機能面と構造面から分けてみます。
・マルチチップ系マイコン
チップ内部にROMやRAMなどのメモリを持たず、アドレスバスとデータバスの端子が常時外に出ているタイプのマイコンです。ターゲット基板上に実装された比較的安価な外部ROM/RAMでプログラムを動作させるため、メモリを大量に消費する大規模なアプリケーション向けに使われます。また、周辺装置とのやりとりを行うためのI/O(入出力)ポートがメイン基板とは別基板になっているシステムにマルチチップ系マイコンが使われます。代表的なものにx86(インテル)、68K(フリースケール)、SH2/3/4(ルネサステクノロジ)などがあります。
・シングルチップ系マイコン
ワンチップマイコンとも呼ばれます。チップ内部にROMやRAMなどのメモリ、I/Oポート、タイマや割り込みコントローラなどの周辺機能を内蔵したタイプのマイコンです。内蔵ROM(数Kbytes〜数百Kbytes)内にプログラムが格納できる、比較的小規模なアプリケーション向けに使われます。また、マイコン内に周辺機能が内蔵されているため、各種I/Oが必要でコストを下げたい場合やシステム全体をコンパクトに仕上げたい場合に有効なマイコンです。代表的なものにH8、SH1(ルネサステクノロジ)や8x51(インテル)、683xx(フリースケール)などがあります。
コラム:マイコン? プロセッサ?
組み込みの世界では、MPU(Micro Processing Unit)、CPU(Central Processing Unit)、MCU(Micro Controller Unit)などの用語が使われます。本文でも書きましたが、マイコンという名称は便利な呼び方です。しかし、マイコンを厳密(?)に定義付けしている場合もあります。ある半導体メーカーの方と筆者が打ち合わせしている際に、ある人からは「私はマイコン担当です」、別のある人からは「私はプロセッサ担当です」と自己紹介され、混乱した経験があります。その半導体メーカーでは、マイコン=16ビットまでのワンチップマイコン、プロセッサ=32ビット以上のRISCマイコンと、社内的に区別していました。また本文では使っていませんが、MCUをワンチップマイコンであると、厳密(?)に定義付けしている場合もあります。どこの世界でも同じですが、用語の定義や意味はあいまいな面があるため、注意が必要です。
・CISC系マイコン
Complex Instruction Set Computerの略です。アセンブラレベルでの高度な命令セットを提供するタイプのマイコンです。マイクロプロセッサは当初、CISCとして発展してきました。CISCタイプのマイコンは、1命令のアセンブリコードで非常に高度な処理を行えますが、その分マイコン内のマイクロコードや回路は複雑になり、命令を実行するために必要なクロックが増加しやすい、スピードの限界も50MHzくらいまでなどの欠点があります。多くの8/16ビット系マイコンに採用されているアーキテクチャで、代表的なものにH8や68K、x86、8x51などがあります。
・RISC系マイコン
Reduced Instruction Set Computerの略です。命令セットを簡略化することで高速処理を可能にするというアーキテクチャを基に作成されたマイコンです。RISCマイコンの命令セットは、CISCプロセッサのそれと比較して少なく単純です。このため、1命令は、高速に実行できます。32/64ビット系マイコンに採用されているアーキテクチャで、代表的なものにARM(アーム)やMIPS(ミップス・テクノロジーズ)、PowerPC(IBM/フリースケール)、SHなどがあります。
本連載で使用するH8/3048F-ONEは、CISC系シングルチップ(ワンチップ)マイコンに分類され、後述するようにタイマや割り込みコントローラなど、各種周辺機能が内蔵されています(詳細は後述)。
図1 H8/3048Fの外観。この写真はH8/3048F。オンボード書き込み/消去と動作時で2電源が必要だったが、本連載で使用するH8/3048F-ONEは単一電源で書き込み/消去が可能になるなどの改良が施されている