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
-
http://supp.iar.com/Support/?Note=17934
Techl Note 17934: 英文サイト -
http://supp.iar.com/Support/?note=11578
Technical note 11578 Execute in RAM after copying from flash/ROM (v5.20 and later) -
http://supp.iar.com/Support/?note=36121
Technical note 36121 Absolute placement (EWARM v.5.x to 6.20) (in C source) -
http://supp.iar.com/Support/?note=40394
Technical note 40394 Should I upgrade to version 5 of EWARM?