main() 関数を使う前提で、以下にお答え致します。尚、main() 関数を使わない場合は、FAQ "ROM にバイナリデータを書き込んだ後、どのようにして実行アドレスに展開されるのでしょうか" を参考に、RAM 領域にコピーするプログラムをユーザが書く必要があります。
初期化変数(実体)は、RW セクションに配置され、初期値はルートリージョンに配置されます。
もし、ルートリージョンを0x0 からの ROM 領域に配置し、実行時に0x050000 からのRAM 領域にコピーされるようにするなら、scatterファイルのこの部分は次のように記述することができます。
LOAD_REGION 0x00000 { ROOT_REGION 0x00000 0x10000 { init.o (+RO) __main.o (+RO) * (Region$$Table) * (ZISection$$Table) } PRG1 0x10000 { * (+RO) } RAM1 0x050000 { file1.o(+RW) * (+RW,+ZI) } }
file1.o 中の初期化されたグローバル変数はすべて、0x0のROOT_REGION (ROM領域)にそれらの初期値が格納され、実行時に 0x050000のRAM1 領域にコピーされます。