ライブラリ関数を特定のアドレスに配置する方法

テクニカル・ノート 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]

 

全ての製品名は、それぞれの所有者の商標または登録商標です。

申し訳ございませんが、弊社サイトではInternet Explorerをサポートしていません。サイトをより快適にご利用いただくために、Chrome、Edge、Firefoxなどの最新ブラウザをお使いいただきますようお願いいたします。