Renesas Synergy™

FAQ 1008194 : 以下のリンク・ディレクティブにおいて、#pragma sectionで指定したセクションが、 指定したアドレスに配置されません。

--------------------------------------------------------------
TEXT : !LOAD ?RX V0x00000800 L0x00100000 {
            .pro_epi_runtime = $PROGBITS ?AX;
            .sconst = $PROGBITS ?A;
            .text = $PROGBITS ?AX;
};
DATA : !LOAD ?RW V0x00800000 L0x00100000 {
            .data = $PROGBITS ?AW;
            .sdata = $PROGBITS ?AWG;
            .sbss = $NOBITS ?AWG;
            .bss = $NOBITS ?AW;
            heap.sec = $NOBITS ?AW heap.sec;
};
SRAM : !LOAD ?RW V0x00400000 {
             sram.data = $PROGBITS ?AW sram.data;
             sram.bss = $NOBITS ?AW sram.bss;
};

__tp_TEXT @ %TP_SYMBOL;
__gp_DATA @ %GP_SYMBOL &__tp_TEXT{DATA SRAM};
__ep_DATA @ %EP_SYMBOL;
--------------------------------------------------------------
どうすればよいですか?

 

回答

DATAセグメント内のマッピング・ディレクティブで、入力セクション名が省略されているため、 同じ属性のものがすべてDATAセグメントに配置されることになります。

.sconstセクションがTEXTセグメント(RX属性)に配置されていますが、 セグメント名が固定されているため、SCONSTセグメント(R属性)に変更してください。

また、リンク・ディレクティブは、配置するアドレス順に記述しなくても問題ありませんが、 アドレスの若い順に(下位アドレスから上位アドレスへ向かって)記述することを推奨します。
そのため、DATAセグメントとSRAMセグメントの記述の順番を変更してください。

以下に、記述例を示します。

-----------------------------------------------------
SCONST  : !LOAD ?R {                                        # 追加
        .sconst = $PROGBITS ?A .sconst;                     # 追加
};                                                          # 追加

TEXT : !LOAD ?RX V0x00000800 L0x00100000 {
        .pro_epi_runtime = $PROGBITS ?AX .pro_epi_runtime;
#       .sconst = $PROGBITS ?A;                             # 削除(またはコメント)
        .text = $PROGBITS ?AX .text;
};

SRAM : !LOAD ?RW V0x00400000 {                              # 移動
        sram.data = $PROGBITS ?AW sram.data;                # 移動
        sram.bss = $NOBITS ?AW sram.bss;                    # 移動
};

DATA : !LOAD ?RW  V0x00800000 L0x00100000 {
        .data = $PROGBITS ?AW .data;                        # 入力セクション追加
        .sdata = $PROGBITS ?AWG .sdata;                     # 入力セクション追加
        .sbss = $NOBITS ?AWG .sbss;                         # 入力セクション追加
        .bss = $NOBITS ?AW .bss;                            # 入力セクション追加
        heap.sec = $NOBITS ?AW heap.sec;
};

__tp_TEXT @ %TP_SYMBOL;
__gp_DATA @ %GP_SYMBOL &__tp_TEXT{DATA SRAM};
__ep_DATA @ %EP_SYMBOL;
-----------------------------------------------------

 

 

適用製品

V850用コンパイラパッケージ [CA850]
他にご質問がございましたら、リクエストを送信してください