連続する領域に変数を配置する
テクニカル・ノート 75313
アーキテクチャ:
ARM
コンポーネント:
linker
更新日:
2019/02/18 8:02
はじめに
本テクニカルノートでは、指定された順序で変数の配置を強制的に行う方法について説明します。
解説
以下の変数配置の方法について説明します。
- セクション名を使う
- 予約済みスペースを使用する
- シンボル名を使う
- 無名構造体を使う
セクション名を使う
ソースコード内で、名前付きセクションに変数を配置するには、@演算子を使用します。
int ab[] @ "1st" = {1, 2, 3, 4, 5, 6, 7, 8};
int a[] @ "2nd" = {1, 2, 3, 4, 5 };
int abc[] @ "3rd" = {1, 2, 3, 4, 5, 6, 7};
リンカ設定ファイルで、fixed order block を使用して、各変数が配置されるセクションの順序を定義します。
define block ARRAYS with fixed order
{
section 1st,
section 2nd,
section 3rd
};
予約済みスペースを使用する
この方法は、アプリケーションが変数間に予約済みのスペースを必要とする場合に使用できます。
リンカ設定ファイルで、予約済みRAMスペースを表すために固定サイズのブロックを定義し、fixed order blockでは変数間に予約済みスペースブロックが配置されるように指定します。
define block RESERVED_SPACE with alignment = 8, size = 1024 { };
define block ARRAYS with fixed order
{
section 1st,
block RESERVED_SPACE,
section 3rd
};
シンボル名を使う
ソースコードで名前付きセクションに配置されない変数を宣言します。
int ab[] = {1, 2, 3, 4, 5, 6, 7, 8};
int a[] = {1, 2, 3, 4, 5 };
int abc[] = {1, 2, 3, 4, 5, 6, 7};
リンカ設定ファイルで、fixed order block を使用して、各変数が配置されるシンボルの順序を定義します。
define block ARRAYS with fixed order
{
symbol ab,
symbol a,
symbol abc
};
無名構造体を使う
リンカディレクティブを使用せずに変数を指定の順序で配置するために
IAR C言語拡張機能を使用して、「無名構造体」を宣言します。
struct
{
int a;
char b;
int c;
};
詳細については、「C/C++ 開発ガイド」 "言語拡張の有効化" および "匿名構造体と匿名共用体" 章 をご参照ください。
「C/C++ 開発ガイド」はIDEのヘルプメニューからご覧いただけます。
まとめ
固定の順序で変数を配置するには、リンカディレクティブを使用してfixed order block を定義し
セクション名、あるいはシンボル名を選択する、
あるいは無名構造体を使用することで、実現することができます。
example に各方法のサンプルプロジェクトが用意されています。
全ての製品名は、それぞれの所有者の商標または登録商標です。