「組み込み」ならではの基礎知識 ――スタートアップ・ルーチンからハードウェアまで

セサミアン3人組

tag: 組み込み

技術解説 2003年5月14日

●スタートアップ・ルーチンの内容

 スタートアップ・ルーチンでは,Cプログラムを実行する前に必要な初期化を行います.WindowsやLinux/UNIXでアプリケーション・プログラムを開発するときは,スタートアップ・ルーチンを意識しません.それは,プログラムの実行環境がいつも同じなので(毎回変更する必要がないので),Cコンパイラが自動的にスタートアップ・ルーチンをリンクしているからです(UNIX系で言うと,スタートアップ・ルーチンは標準ライブラリといっしょにcrt0.oという名まえで存在する).ところが組み込み機器の場合,どのようなデバイスがつながっているか,どれだけのメモリが搭載されているかは機器に依存します.そのため,デバイスの初期化といっても機器によってそれぞれ処理が異なります.加えて,デバイスを初期化する際のやりかたも使用するマイコンによって異なってきます.したがって,スタートアップ・ルーチンが重要になってくるわけです.スタートアップ・ルーチンを理解できないと,組み込みソフトウェアを作れないと言っても過言ではありません.

 スタートアップ・ルーチンでは,一般には次のような処理を行います(図2-1の(3))

●スタックの設定
●プログラムの実行に必要なデータの設定
  ○ROM領域からRAM領域への初期値データの転送
  ○初期値を持たないメモリ領域の0クリア
●マイコンの動作モードの設定
  ○マイコン内蔵の周辺機能を使用するための各種レジスタの初期化
  ○割り込み許可設定
●ハードウェアの初期化
●ハードウェアの自己診断

 スタックは前項の「1.プログラムはどのように動くのか」にも出てきましたが,プログラムを実行する際に必要となる,変数のためのRAM領域です.スタートアップ・ルーチンによってスタック領域を定義することもよくあります.

 プログラムの実行に必要なものとしては,スタック以外にも定数やグローバル変数があります.これらを初期化もしくは0クリアする必要があります.定数の一部の値はROMを参照してRAMにコピーしてやる必要があるかもしれません.それが,ROM領域からRAM領域への初期値データの転送です.

 また,図2-1の(4)ではスタートアップ・ルーチンからCプログラムのmain関数を直接呼び出すように書いていますが,C言語の標準ライブラリを使用する場合は,main関数を呼び出す前に標準ライブラリの初期化を実行する必要があります.そして,ソフトウェア自身の実行だけでなくマイコンやそのほかのハードウェアを使用するための初期化も必要になります.これらの初期化は,マイコンやハードウェアのマニュアルを参照しながらコーディングします.

 これらの下準備を行ったあとで,やっとmain関数が呼び出されます(図2-1の(4)).また,プログラムの実行終了後にスタートアップ・ルーチンに戻ってくる(すなわち,プログラム実行の後処理もスタートアップ・ルーチンに記述する)ことも少なくありません(図2-1の(5)).

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日