8.4 ROMイメージの作成

この節では,組み込み向けアプリケーションで必要となる,ROMイメージの作成について説明します。

 

アプリケーション中で外部変数や静的変数を定義すると,それらの変数はRAM上のセクションに配置されます。変数が初期値を持つ場合,アプリケーションの開始時にはRAMに初期値が存在している必要があります。

一方で,ハードウェアの起動時やリセット時はRAMの値は不定です。従って,リセットからアプリケーションの起動までの間に,RAMに変数の初期値を格納する必要があります。

CC-RLでは,プログラム本体と初期値データをROMに配置した,ROMだけのプログラムイメージを作成することができます。このプログラムを実行すると,スタートアップ・ルーチン内で,ROMに準備した初期値データをRAMにコピーしてRAMの初期化を行います。

セルフ・プログラミングのために,プログラム・コードをRAM上に配置することがあります。この場合も同様に,スタートアップ・ルーチン内で,ROMに準備したプログラム・コードをRAMに配置します。

 

ROMからRAMへデータを配置するには,最適化リンカの-romオプションを使用します。

-rom=初期値データセクション名=初期化先セクション名

 

リンカでセクションの自動配置機能を指定しない場合は,初期値データセクション,初期化先セクションのアドレスをそれぞれ-startオプションで指定する必要があります。リンカでセクションの自動配置機能を指定する場合は,-startオプションでのアドレス指定は不要です。

-start=セクション名[,セクション名]/配置先アドレス

 

ユーザ・プログラム中にセクション.text,.textf,.RLIB,.SLIB,.const,.constf,.data,.sdata,.bss,.sbssがあるとします。実行時に.textを0x100番地に,.constを0x2000番地に,再配置属性DATA,BSSのセクションを0xfe000 番地に,再配置属性SDATA,SBSS のセクションを0xffe20 番地に配置したい場合,次のように記述します。

-start=.text/100
-start=.const,.RLIB,.SLIB,.textf,.constf,.data,.sdata/2000
-start=.dataR,.bss/FE000
-start=.sdataR,.sbss/FFE20
-rom=.data=.dataR,.sdata=.sdataR

 

コピー先のセクション名.dataR,.sdataRは別名でも構いませんが,スタートアップ内の記述と合わせる必要があります。実行時には,.dataから.dataR,.sdataから.sdataRにデータがコピーされ,.bss,.sbssを初期化して使用します。

 

配置イメージは次のようになります。

図 8.1

コピー処理前後の配置イメージ