5.82 未初期化データがゼロで初期化されないようにする方法

ANSI C の仕様では、明示的に初期化されていない静的データはゼロで初期化されることになっています。

したがって、デフォルトでは、コンパイラはゼロで初期化されたデータと未初期化データを同じ ZI データセクションに配置します。このセクションには、C ライブラリ初期化コードによって実行時にゼロが設定されます。
そのデータを別のセクションに配置することで、未初期化データがゼロで初期化されないようにすることができます。そのためには、#pragma arm section を使用するか、--gnu を使用してコンパイルする際に GNU コンパイラ拡張機能 __attribute__((section("name"))) を使用します。
以下の例は、#pragma arm section を使用した未初期化データの保持方法を示しています。
#pragma arm section zidata = "non_initialized"
int i, j; // 未初期化データを non_initialized セクションに配置(プラグマを指定しない場合、
             デフォルトで .bss セクションに配置される)
#pragma arm section zidata // デフォルト(.bss セクション)に戻す
int k = 0, l = 0; // ゼロで初期化されたデータを .bss セクションに配置
non_initialized セクションを以下のように独自の UNINIT 実行領域に配置します。
LOAD_1 0x0
{
  EXEC_1 +0
  {
    * (+RO)
    * (+RW)
    * (+ZI) ; ZI データをゼロで初期化
  }
  EXEC_2 +0 UNINIT
  {
    * (non_init) ; ZI データをゼロで初期化しない
  }
}
関連する参考文書
8.92 --gnu
10.79 #pragma arm section [section_type_list]
10.69 __attribute__((section("name"))) 変数属性
関連情報
実行領域の属性
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.