リンカ・ローダと実行形式
OSのないマイコンで、電源を入れた直後に起動コードがmainを呼ぶ前に行う処理として正しいものはどれか。
- A.textの機械語をすべてRAMからフラッシュへ書き戻す
- BRAMの内容を読み出し、前回の電源断のときの変数の値を復元する
- C.dataの初期値をフラッシュからRAMへコピーし、.bssの領域を0で埋める
答えと解説を見る
正解:C. .dataの初期値をフラッシュからRAMへコピーし、.bssの領域を0で埋める
電源を切るとRAMの内容は消えるので、初期値のある変数の値は書き換えられないフラッシュに保存しておき、起動コードがRAM上の変数の場所へコピーします。初期値のない変数の領域(.bss)は0で埋めます。リンカスクリプトでは、.dataについて「フラッシュに置く番地」と「実行時にRAMで使う番地」を別々に指定します。これらを終えて初めて、C言語の約束どおりの状態でmainを始められます。
- A. 書き戻しは行いません。
- B. ふつうのRAMの内容は電源を切ると消えます。
- C. 正しい。C言語の初期値の約束を守るための処理です。