ライブラリ関数を特定のアドレスに配置する方法
テクニカル・ノート 33441
アーキテクチャ:
ARM, RH850, RX, SH, STM8
コンポーネント:
linker
更新日:
2018/08/13 1:00
はじめに
IAR ILINKリンカは、出力をリンクする際、(ライブラリ関数などの)セクションやブロックを任意の順序で配置します。(設計上、そのようになっています)。
解決方法
「fixed order」パラメータを追加したリンカの「define block」ディレクティブで、ライブラリ関数のグループ化が行えます。例えば、「object」キーワードを指定した「セクションセレクタ」でDLIB関数のグループ化が行えます。
詳細については、『開発ガイド』の「セクションセレクタ」の章を参照してください。
例
この例では、指定された順序でライブラリ関数をグループ化し、それをROM領域の末尾に配置します。
.icfファイルに以下の行を追加します。
define block LIB_CODE with fixed order
{
readonly object xreportassert.o,
readonly object iarttio.o,
readonly object ABImemcpy.o,
readonly object cmain.o
};
place in ROM_region { readonly, last block LIB_CODE };
すると、.mapファイルが以下のように出力されます。
LIB_CODE 0x0800cd98 0x192 <Block>
.text ro code 0x0800cd98 0xa0 xreportassert.o [3]
.text ro code 0x0800ce38 0x6c iarttio.o [6]
.text ro code 0x0800cea4 0x70 ABImemcpy.o [5]
.text ro code 0x0800cf14 0x16 cmain.o [5]
全ての製品名は、それぞれの所有者の商標または登録商標です。