リンクオプション -lib_rename について

こんにちは。あさたろうと申します。

CPU : R5F566TEBxFP(RX66T)
開発環境 : CS+ for CC V8.01.00 [03 Dec 2018]
ビルドツール : CCRX V3.01.00

プロジェクトでリンクするライブラリのセクションを、-lib_renameリンクオプションで別のセクションに割り付けると動作しなくなります。

オプションを指定しない場合と、指定した場合とでマップファイルを比較すると、Rセクションに割り付けられていた変数がDxxxセクションに割り付けられてしまって動作しないことが判りました(xxxは、オプションで指定した変更後の名前)。

-lib_renameによる指定で、ライブラリを別セクションに正しく割り付けるには、どのように設定すればよいでしょうか?

ライブラリを利用するアプリケーションと別のセクションにして欲しいというのは、お客様からの要望です。

どうぞよろしくお願いいたします。

 

現象を確認可能なプロジェクトを作成したのですが、サイズ制限で全て添付できませんでした。
プロジェクトから、スマート・コンフィギュレータで生成される r_bsp, r_config, r_pincfg フォルダを
削除したものを添付しています。
スマート・コンフィギュレータの設定ファイルは含んでいますので、そちらから生成しなおせばビルド
できるのではないかと思います。section.zip
北斗電子のHSBRX66T100Bボード用です。

 

Parents
  • あさたろう さん、こんにちは。NoMaYです。#私のPCが古過ぎてCC-RX V3.01が動かなくて推測ですけど。

    これは、あと、以下の2手順が必要なのではないでしょうか、、、

    (1) CS+のリンクオプションの[ROMからRAMへマップするセクション]に以下の赤文字行を追加

    D=R
    D_1=R_1
    D_2=R_2
    Dxxx=Rxxx
    Dxxx_1=Rxxx_1
    Dxxx_2=Rxxx_2

    (2) BSPモジュールのソースのsrc\smc_gen\r_bsp\mcu\all\dbsct.cに以下の赤文字行を追加

    /* Section start */
    #pragma section C C$DSEC

    extern st_dtbl_t const _DTBL[] = {
    #ifdef BSP_MCU_DOUBLE_PRECISION_FLOATING_POINT
        { __sectop("D_8"), __secend("D_8"), __sectop("R_8") },
    #endif
        { __sectop("D"), __secend("D"), __sectop("R") },
        { __sectop("D_2"), __secend("D_2"), __sectop("R_2") },
        { __sectop("D_1"), __secend("D_1"), __sectop("R_1") },
        { __sectop("Dxxx"), __secend("Dxxx"), __sectop("Rxxx") },
        { __sectop("Dxxx_2"), __secend("Dxxx_2"), __sectop("Rxxx_2") },
        { __sectop("Dxxx_1"), __secend("Dxxx_1"), __sectop("Rxxx_1") }
    };

    [追記]

    あと、BSSセクションの名前も変更されているのであれば、以下も必要かなと思います。

    (2') BSPモジュールのソースのsrc\smc_gen\r_bsp\mcu\all\dbsct.cに以下を追加

    /* Section start */
    #pragma section C C$BSEC

    extern st_btbl_t const _BTBL[] = {
    #ifdef BSP_MCU_DOUBLE_PRECISION_FLOATING_POINT
        { __sectop("B_8"), __secend("B_8") },
    #endif
        { __sectop("B"), __secend("B") },
        { __sectop("B_2"), __secend("B_2") },
        { __sectop("B_1"), __secend("B_1") },
        { __sectop("Bxxx"), __secend("Bxxx") },
        { __sectop("Bxxx_2"), __secend("Bxxx_2") },
        { __sectop("Bxxx_1"), __secend("Bxxx_1") }
    };

     

Reply
  • あさたろう さん、こんにちは。NoMaYです。#私のPCが古過ぎてCC-RX V3.01が動かなくて推測ですけど。

    これは、あと、以下の2手順が必要なのではないでしょうか、、、

    (1) CS+のリンクオプションの[ROMからRAMへマップするセクション]に以下の赤文字行を追加

    D=R
    D_1=R_1
    D_2=R_2
    Dxxx=Rxxx
    Dxxx_1=Rxxx_1
    Dxxx_2=Rxxx_2

    (2) BSPモジュールのソースのsrc\smc_gen\r_bsp\mcu\all\dbsct.cに以下の赤文字行を追加

    /* Section start */
    #pragma section C C$DSEC

    extern st_dtbl_t const _DTBL[] = {
    #ifdef BSP_MCU_DOUBLE_PRECISION_FLOATING_POINT
        { __sectop("D_8"), __secend("D_8"), __sectop("R_8") },
    #endif
        { __sectop("D"), __secend("D"), __sectop("R") },
        { __sectop("D_2"), __secend("D_2"), __sectop("R_2") },
        { __sectop("D_1"), __secend("D_1"), __sectop("R_1") },
        { __sectop("Dxxx"), __secend("Dxxx"), __sectop("Rxxx") },
        { __sectop("Dxxx_2"), __secend("Dxxx_2"), __sectop("Rxxx_2") },
        { __sectop("Dxxx_1"), __secend("Dxxx_1"), __sectop("Rxxx_1") }
    };

    [追記]

    あと、BSSセクションの名前も変更されているのであれば、以下も必要かなと思います。

    (2') BSPモジュールのソースのsrc\smc_gen\r_bsp\mcu\all\dbsct.cに以下を追加

    /* Section start */
    #pragma section C C$BSEC

    extern st_btbl_t const _BTBL[] = {
    #ifdef BSP_MCU_DOUBLE_PRECISION_FLOATING_POINT
        { __sectop("B_8"), __secend("B_8") },
    #endif
        { __sectop("B"), __secend("B") },
        { __sectop("B_2"), __secend("B_2") },
        { __sectop("B_1"), __secend("B_1") },
        { __sectop("Bxxx"), __secend("Bxxx") },
        { __sectop("Bxxx_2"), __secend("Bxxx_2") },
        { __sectop("Bxxx_1"), __secend("Bxxx_1") }
    };

     

Children
No Data