カスタマーサポートセンター

FAQ~よくある質問~ | FAQマスタ詳細表示

FAQ詳細情報

ID 10810663
FAQカテゴリ(大) アセンブラ
最終更新日 2014-02-16

質問内容

TN17934: アセンブラソースで絶対アドレスへの配置 (EWARM v.5.x to 6.20)

回答内容

EWのターゲット : ARM
EWのコンポーネント : アセンブラ
キーワード : @ / #pragma locate, absolute address
更新日 : November 18, 2010

背景 - 一般
EWARM のバージョン 4.x と 5.x の間では、大きな変更がありました。
参考資料URLに詳しい情報があります。

背景 - 各論
バージョン 5.x のアセンブラでは、「絶対アドレスに配置する」という概念がなくなりました。

問題
古い (v.4.xx) ディレクティブである (ORG, ASEG+address and ASEGN) は、 EWARM 5.xx では無効です。アセンブラソースコードは下記のようになります

        NAME get
        PUBLIC get42
        PUBLIC jjj
        SECTION `.my_rodata`:CONST:NOROOT(2)
jjj:
        DATA
        DC32 42

        SECTION `.my_text`:CODE:NOROOT(2)
        THUMB
get42:
        LDR      R0,get42_0     ;; jjj
        LDR      R0,[R0, #+0]
        BX       LR               ;; return
        Nop
        DATA
get42_0:
        DC32     jjj
        END

これは、CONSTを .my_rodata セグメントに、CODE を .my_text に配置しています。

.icf (Ilink 制御ファイル) には、下の行が追加されています。

define symbol _my_CODE__   = 0xEEBB0000;
define symbol _my_DATA__   = 0xAA110000;
place at address mem:_my_CODE__ { readonly section .my_text };
place at address mem:_my_DATA__ { readonly section .my_rodata };


Ilink は .my_text セクションを 0xEEBB0000 番地に、.my_rodata セクションを 0xAA110000 番地に配置します。

移植
さらに、このガイドの「移行プロセス」をよく読むことを強くお勧めします。これは、バージョン 4 からバージョン 5に移植する際に、何をするべきかの見通しがつきます。

 

参考資料URL