7.2.10 __at セクションを使用したフラッシュメモリでのキーの配置

一部のフラッシュデバイスでは、特定の機能をアクティブにするためにキーをアドレスに書き込む必要があります。__at セクションを使用すると、値を特定のアドレスに簡単に書き込むことができます。

デバイスに 0x8000 から 0x10000 のフラッシュメモリが搭載されており、アドレス 0x8000 でキーが必要であると仮定します。__at セクションを使用してキーをアドレスに書き込むには、変数を宣言し、コンパイラが .ARM.__at_0x8000 というセクションを生成できるようにする必要があります。
// flash_key を .ARM.__at_0x8000 という名前のセクションに配置する
long flash_key __attribute__((section(".ARM.__at_0x8000")));

フラッシュメモリの実行領域の手動配置

以下の例では、フラッシュメモリの実行領域を手動配置したスキャッタファイルのフラグメントを示しています。
ER_FLASH 0x8000 0x2000
{
  *(+RW)
  *(.ARM.__at_0x8000) ; キー
}
リンカのコマンドラインオプション --no_autoat を使用して、手動配置を有効にします。

フラッシュメモリの実行領域の自動配置

以下の例では、フラッシュメモリの実行領域の自動配置を記述したスキャッタファイルを示しています。リンカのコマンドラインオプション --autoat を使用して、自動配置を有効にします。
LR1 0x0
{
  ER_FLASH 0x8000 0x2000
  {
    *(+RO)                   ; 他のコードと読み出し専用データ
                             ; __at セクションが自動的に選択される
  }
  ER2 0x4000
  {
    *(+RW +ZI)               ; +RW によって .ARM.__at_0x4000 が選択される
  }
}
関連する概念
7.2.6 特定のアドレスに __at セクションの配置
7.2.8 __at セクションの自動配置
7.2.9 __at セクションの手動配置
8.4 実行領域の記述
3.3.2 FIRST 属性と LAST 属性を使用したセクションの配置
関連する参考文書
12.10 --autoat、--no_autoat
関連情報
__attribute__((section("name"))) 変数属性
非機密扱いPDF file icon PDF 版ARM DUI0474LJ
Copyright © 2010-2015 ARM.All rights reserved.