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 領域にコピーされます。