プログラム中で,グローバル,またはstaticな変数を宣言すると,初期値を持つ変数ならばdata属性のセクションへ,初期値を持たない変数ならばbss属性のセクションへというように,RAM上のセクションに配置されます。特に初期値を持つ変数ならば,その初期値自体がRAM上に配置されます。その他,アプリケーションの高速化のために,プログラム・コードを内蔵RAM領域へ配置する場合もあります。
組み込みシステムの場合,デバッグ時にインサーキット・エミュレータなどを使用する場合,実行可能なモジュールを配置イメージのままダウンロードして実行できます。しかし,実際にプログラムをターゲット・システムのROM領域に書き込んで実行する場合,data属性のセクションにある初期値情報や,RAM領域に配置するプログラム・コードは,実行前にRAM上に展開されていなければなりません。つまり,RAMに展開するデータをROM上に持たせておき,それをアプリケーション実行前にROMからRAMへコピーする作業が必要になります。
ROM化は,data属性セクションの変数の初期値情報や,RAM上に配置するプログラムを,1つのセクションにパッキングすることです。このセクションをROM上に配置し,CC-RHで用意されているコピー関数を呼び出すことによって,初期値情報やプログラムを容易にRAM上へ展開することができます。
ROM化用オブジェクトを作成する流れの概要は,次図のようになります。
「図 8.1 ROM化用オブジェクトの作成」のようにROM化用オブジェクトを作成すると,RAMセクション領域初期化関数_INITSCT_RHを実行することによって,RAMに配置するデータを,パッキングされたROMからコピーします。
ROM領域から,RAM領域へコピーする関数は次のとおりです。
この関数はライブラリ“libc.lib”に格納されています。
また,リロケーション解決したオブジェクト・ファイルにシンボル情報,デバッグ情報が含まれる場合,それらを削除することなくROM化用のオブジェクト・ファイルを生成します。そのため,ROM化後のオブジェクト・ファイルでもデバッガによるソース・デバッグができます。