「組み込み」ならではの基礎知識 ――スタートアップ・ルーチンからハードウェアまで
組み込みソフトウェアには,一般のアプリケーション・ソフトウェアにはない考えかたが存在する.ここでは,「組み込み」ならではのいくつかの概念について解説する.例えば,プログラムのランタイム構造やスタートアップ・ルーチン,割り込み,配列の実体,同期/非同期,volatile,ハードウェアなどを説明する. (編集部)
- 目次 -
- プログラムはどのように動くのか
- main関数以前(スタートアップ)
- array[-1]はなぜ動くのか(配列の実体)
- volatileを指定したくなるとき
- 時間の制御問題(同期と非同期呼び出し)
- ポーリングと割り込み
- エッジ・トリガとレベル・センス
- メモリとポート
ここでは,組み込みソフトウェア開発者をめざす新人の皆さんに理解していただきたい考えかたについて解説します.ここで解説する内容は,一般的なC言語やソフトウェア開発の解説書にはあまり説明されていないものです(もしかすると,皆さんの周りの先輩もちゃんと説明できないかもしれない).しかし,組み込みソフトウェア開発ではきわめて重要な考えかたです.
また,ハードウェアに関する説明もありますが,「わたしはソフトウェア技術者だから関係ないや」などとは決して考えないでください.この世界で長く技術者としてしごとをしていくためには,ソフトウェア技術者だからとか,ハードウェア技術者だからという枠を持つことは厳禁です.
本稿で説明する知識は,大きく次の二つに分けられます.
1)プログラムを起動させるためのしくみと,起動したプログラムが動くための基本メカニズム
ランタイム構造,スタートアップ・ルーチン,配列の実体,volatile,非同期呼び出し
2)プログラムがマイコン(システム)と外部との間でデータをやり取りするための基礎知識
ポーリングと割り込み,エッジ・トリガとレベル・センス,メモリとポート
C言語に関する本の内容は,C言語の文法や使いかたについての解説がほとんどです.WindowsやLinux/UNIX上でプログラミングするだけならそれで十分でしょう.例えば,LinuxやUNIX上ならば,おまじないのように,
% cc example.c
とコマンド入力すれば,ファイルexample.cに書かれたC言語のプログラムがコンパイルされ,a.outという名まえの実行可能なファイルが生成されます.そして,
% ./a.out
とコマンド入力すれば,ファイルexample.cに書いておいたプログラムが(あわよくば意図したとおりに)実行されます.この手順は,使用するOS環境やコンパイラなどによって若干変わりますが,WindowsやLinux/UNIXの環境ならば,基本的にはmain関数以降のプログラムを書き,そのファイルをコンパイルして実行するだけです.プログラムを動かすために,プログラムの起動や動作時のしくみなどを気にする必要はありません.