ブロックを指定された順序でリンクする
テクニカル・ノート 92924
アーキテクチャ:
ARM, RL78, RX, SH, STM8
コンポーネント:
linker
更新日:
2018/01/11 4:58
はじめに
このテクニカルノートは IAR ILINK Linker リンカの出力を特定の順番にする方法を解説します。
背景
セクションやブロックをリンクするとその順番は不定となります。(これはILINKの仕様です)
解決策
リンカディレクティブ define block は fixed order パラメータによって、 固定順序で配置することを可能にします。
サンプルプロジェクト 1
しばしば ( .icf ファイル内で) RAM に配置するためのディレクティブは以下のよう記述されます:
place in RAM_region { readwrite,
block CSTACK, block SVC_STACK, block IRQ_STACK, block FIQ_STACK,
block UND_STACK, block ABT_STACK, block HEAP };
固定順序で配置したい場合は、上のディレクティブを以下の2つのディレクティブに置き換えます:
define block FIXED_ORDER_RAM with fixed order { block CSTACK,
block SVC_STACK, block IRQ_STACK, block FIQ_STACK,
block UND_STACK, block ABT_STACK, block HEAP};
place in RAM_region { readwrite, last block FIXED_ORDER_RAM };
サンプルプロジェクト 2
サンプルプロジェクト ( Example 2 (ARM).zip , Example 2 (RX).zip , Example 2 (SH).zip) には、ROMとRAM両方の領域において、指定した順序でブロックを配置する例が含まれています。
詳細
Define Block ディレクティブについては、C/C++ 開発ガイドの 「セクションの取り扱い」章に記載されています。
全ての製品名は、それぞれの所有者の商標または登録商標です