Everything
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オプションで指定します。