Skip to main content

IAR Embedded Workbench for Arm 9.70.x

データと関数のセクションへの配置

このセクションの内容:

データまたは関数をデフォルト以外の指定セクションに配置する場合、以下の方法を使用できます。

  • @演算子または#pragma locationディレクティブを使用して、個々の変数や関数を指定のセクションに配置できます。 指定のセクションは定義済セクションまたはユーザ定義セクションです。

  • ‑‑sectionオプションは、コンパイルユニット全体の一部である変数および関数をセクションに配置するときに使用できます。

C++の静的メンバ変数は、他の静的変数と同様に、指定セクションに配置できます。

事前定義されたセクションに加えて独自のセクションを使用する場合、セクションもリンカ設定ファイルで。

注記

デフォルトで使用している以外の定義済セクションの変数や関数を、明示的に配置する場合は注意が必要です。状況によっては有益なオプションですが、配置を間違えると、コンパイル時やリンク時のエラーメッセージやアプリケーションの誤動作が発生することがあります。状況を慎重に考慮し、宣言および関数や変数の使用に関する要件に、厳密に従ってください。

セクションの位置は、リンカ設定ファイルから制御できます。

セクションの詳細は、セクションリファレンスを参照してください。

セクションへの変数の配置例

以下の例では、データオブジェクトがユーザ定義セクションに配置されます。リンクの際には、セクションが適切なメモリエリアに配置されていることを必ず確認してください。

__no_init int alpha @ "MY_NOINIT";      /* OK */

#pragma location="MY_CONSTANTS"
const int beta = 42;                    /* OK */

const int gamma @ "MY_CONSTANTS" = 17;  /* OK */
int theta @ "MY_ZEROS";              /* OK */
int phi @ "MY_INITED" = 4711;       /* OK */ 

リンカは、各変数毎に正しい初期化が行われるようにします。制御または自動初期化を停止したい場合、リンカ設定ファイルのinitializedo not initializeディレクティブを使用できます。

セクションへの関数の配置例
void f(void) @ "MY_FUNCTIONS";

void g(void) @ "MY_FUNCTIONS"
{
}

#pragma location="MY_FUNCTIONS"
void h(void);