- IAR Embedded Workbench for Arm 9.70.x
- IAR C/C++ 開発
- ILINK を使用したリンク
- コードおよびデータの配置(リンカ設定ファイル)
コードおよびデータの配置(リンカ設定ファイル)
メモリへのセクションの配置は、IAR ILINKリンカが行います。これは、リンカ設定ファイルを使用します。このファイルでは、ユーザが、ILINKが各セクションをどのように扱うか、および使用可能メモリにセクションがどのように配置されるかを定義できます。
一般的なリンカ設定ファイルには、以下の定義が含まれます。
使用できるアクセス可能メモリ
これらのメモリの使用領域
入力セクションの扱い方
作成されるセクション
使用できる領域にセクションを配置する方法
ファイルは、一連の宣言型ディレクティブで構成されます。つまり、リンクプロセスは、すべてのディレクティブで同時に制御されます。
該当設定ファイルを使用してコードをリビルドするだけで、同一ソースコードをさまざまな派生品で使用できます。
設定ファイルの簡単な例
以下のメモリ条件を持つ単純な32ビットのアーキテクチャを想定します。
アドレス可能な4GB のメモリ空間がある。
アドレス範囲
0x0000–0x10000にROMメモリがある。アドレス範囲
0x20000–0x30000にRAMメモリがある。スタックのアライメントが8である。
システム起動コードが固定アドレスにある。
ここで想定するアーキテクチャの単純な構成ファイルは、以下のようになります。
/* Memory regions in an address space */ define region ROM = [from 0x00000 size 0x10000]; define region RAM = [from 0x20000 size 0x10000]; /* Create a stack */ define block STACK with size = 0x1000, alignment = 8 { }; /* Handle initialization */ initialize by copy { readwrite }; /* Initialize RW sections */ /* Place startup code at a fixed address */ place at start of ROM { readonly section .cstartup }; /* Place code and data */ place in ROM { readonly }; /* Place constants and initializers in ROM: .rodata and .data_init */ place in RAM { readwrite, /* Place .data, .bss, and .noinit */ block STACK }; /* and STACK */
この設定ファイルは、最大 4GBのアドレッシング可能なメモリmemを1つ定義しています。さらに、Memの中に、ROM領域およびRAM領域がそれぞれROMおよびRAMという名前で定義されています。 各領域のサイズは64KBです。
次に、このファイルは、アプリケーションスタックが常駐する、STACKという名前のサイズ4KBの空のブロックを作成します。ブロックの作成は、配置やサイズなどをさらに制御するために使用できる基本的な方法です。ブロックは、セクションのグループ化に使用できますが、この例のように、メモリエリアのサイズおよび配置の指定にも使用できます。
次に、設定ファイルは、変数、リード/ライト型(readwrite)セクションの初期化方法を定義します。この例では、イニシャライザはROMに配置され、アプリケーション起動時にRAMエリアにコピーされます。デフォルトでは、ILINKは、圧縮した方がいいと判断した場合はイニシャライザを圧縮します。
設定ファイルの最後の部分は、使用可能な領域に対してすべてのセクションを実際にどのように配置するかを定義しています。まず、起動コード(リードオンリー(readonly)セクション .cstartupに配置するように定義されている)が、ROM領域の先頭、つまりアドレス0x00000に配置されます。
注: {}内は、セクション選択と呼ばれ、ディレクティブが適用されるセクションを選択します。次に、リードオンリーセクションの残りの部分が、ROM領域に配置されます。
注: セクション選択{ readonly section .cstartup }は、より一般的なセクション選択{ readonly }よりも優先されます。
さらに、リード/ライト(readwrite)セクションおよびSTACKブロックは、RAM領域に配置されます。
以下の図は、アプリケーションがメモリにどのように配置されるかを示しています。

これらの標準ディレクティブのほか、設定ファイルは、以下の方法を定義するディレクティブを含むことができます。
いくつかの方法でアドレスが可能なメモリのマッピング
条件ディレクティブの扱い
値がアプリケーションで使用できるシンボルの作成
ディレクティブが適用されるセクションのさらに詳細な選択
コードおよびデータのさらに詳細な初期化
リンカ設定ファイルのカスタマイズの詳細および例については、「コードおよびデータの配置(リンカ設定ファイル)」を参照してください。
リンカ設定ファイルの詳細は、「リンカ設定ファイルの概要」を参照してください。