セクションの配置
このセクションの内容:
選択したデフォルト設定ファイルでは、事前に定義されているすべてのセクションがメモリに配置されますが、場合によっては、これを修正する必要があります。たとえば、定数シンボルを保持するセクションをデフォルトの場所ではなくCONSTANT領域に配置する場合です。この場合、place inディレクティブを使用します。以下に例を示します。
/* Place sections with readonly content in the ROM region */
place in ROM {readonly};
/* Place the constant symbols in the CONSTANT region */
place in CONSTANT {readonly section .rodata};注記
IARビルドツールで使用されるセクションを、その内容を異なる方法で参照するメモリに配置しようとすると、エラーが発生します。
リンク後に配置ディレクティブを使用する場合、マップファイルで配置の概要(コマンドラインオプション‑‑map)を確認してください。
セクションをメモリの特定のアドレスに配置する
セクションをメモリの特定のアドレスに配置するには、place atディレクティブを使用します。以下に例を示します。
/* Place section .vectors at address 0 */
place at address 0x0 {readonly section .vectors};セクションを領域の開始または終了位置に配置する
セクションを領域の開始または終了位置に配置する方法は、特定のアドレスに配置する方法と似ています。以下に例を示します。
/* Place section .vectors at start of ROM */
place at start of ROM {readonly section .vectors};独自のセクションの宣言および配置
IARビルドツールで使用されるセクションのほかに、コードまたはデータの固有な部分を保持する新しいセクションを宣言するには、コンパイラおよびアセンブラのメカニズムを使用します。以下に例を示します。
/* Place a variable in that section. */ const short MyVariable @ "MYOWNSECTION" = 0xF0F0;
以下はアセンブラ言語の場合の例です。
name createSection
section MYOWNSECTION:CONST ; Create a section,
; and fill it with
dc16 0xF0F0 ; constant bytes.
end新しいセクションを配置するには、オリジナルのplace in ROM {readonly};ディレクティブをそのまま使用します。
ただし、セクションMyOwnSectionを明示的に配置するには、place inディレクティブでリンカ設定ファイルを更新します。以下に例を示します。
/* Place MyOwnSection in the ROM region */
place in ROM {readonly section MyOwnSection};