A.5.3
初期値あり変数をROMからRAMへ転送する
スタートアップ・ルーチンのresetprg.cファイルの_INITSCT関数内で初期値あり変数をROMからRAMへの転送を行います。転送の対象となるセクションの追加は、dbsct.cファイル内の下記に記述を追加することで可能です。
【記述例】
<dbsct.c>
・・・
#pragma section C C$DSEC
extern const struct {
_UBYTE *rom_s; /* Start address of the initialized data section in ROM */
_UBYTE *rom_e; /* End address of the initialized data section in ROM */
_UBYTE *ram_s; /* Start address of the initialized data section in RAM */
} _DTBL[] = {
{ __sectop("D"), __secend("D"), __sectop("R") },
{ __sectop("D_2"), __secend("D_2"), __sectop("R_2") },
{ __sectop("D_1"), __secend("D_1"), __sectop("R_1") }
};
・・・
|
上記では、D, D_2, D_1セクションをR, R_2, R_1セクションへの転送するためにINITSCT関数で使用するアドレスをテーブルに格納します。尚、D, D_2, D_1とR, R_2, R_1の配置アドレスは、最適化リンカの-startオプションで指定し、ROMからRAMへの転送によるリロケーション解決は、最適化リンカの-romオプションで指定します。