「組み込み」ならではの基礎知識 ――スタートアップ・ルーチンからハードウェアまで
2 main関数以前(スタートアップ)
WindowsやLinux/UNIXの環境でC言語を使ってプログラミングするときは,main関数以降をコーディングします.が,プログラムはmain関数から始まっているのではありません.その前段階として,スタートアップ・ルーチンというものが存在するのです.
組み込みシステムにおいて,プログラムを動かすためにはスタートアップ・ルーチンを理解することが必要です.スタートアップ・ルーチンが何をしているのかを把握せずにデバッグしても,ざるで水を汲むような作業になりかねません.組み込みソフトウェア技術者としてスタート地点に立つために,ぜひ理解しておかなければならない項目です.
●電源を入れるとまず動くのがスタートアップ・ルーチン
組み込みプログラムは通常マイコンの上で動作します.マイコンが動き始めるときの動作はマイコンによって異なりますが,ここではその一例を説明します.
組み込み機器が動き始める,つまり電源が入ったり,リセット・ボタンが押されたりすると,マイコンにはリセットによる強制的な割り込みが入ります(図2-1の(1)).この割り込みは,マイコンに「今の状態がどうあれ,初期状態から動作せよ」という強制的な指令です.リセットによる強制的な割り込みが入ると,マイコンはある固定のアドレス(割り込みベクトル領域と呼ばれる特別なメモリ領域のうち,リセットに割り当てられたベクトル番地)の内容を読み込みます.そこに書かれている内容はマイコンによって異なり,ジャンプ先のアドレスであったり,短いプログラムであったりします.
書かれている内容がジャンプ先のアドレスの場合は,そのアドレスに制御を移します(図2-1の(2)).また,書かれている内容がプログラムの場合は,そこに書かれているプログラムを実行しますが,その内容は先ほどと同じように,あるアドレスに制御を移すものです.いずれにせよ,これらによってプログラムが動き出すわけです.このときに呼び出されるプログラムをスタートアップ・ルーチンと呼びます.