__attribute__((bitband)) 型属性

__attribute__((bitband)) は、メモリアーキテクチャの SRAM 領域とペリフェラル領域にあるシングルビット値への効率的なアトミックアクセスを可能にする型属性です。リードモディファイライトという従来のアプローチに依存せずに、特定のメモリ領域への 1 回のメモリアクセスで直接シングルビットをセットまたクリアすることができます。また、従来のように読み出し後にシフト/マスク演算を行わなくても、シングルビットを直接読み出すことができます。__attribute__((bitband)) の使用例をExample 10 に示します。

Example 10. __attribute__((bitband)) の使用

typedef struct {
  int i :1;
  int j :2;
  int k :3;
} BB __attribute__((bitband));

BB bb __attribute__((at(0x20000004));

void foo(void)
{
  bb.i = 1;
}

メモリアクセスの幅に依存するペリフェラルの場合、ビットバンド構造体のビットフィールドの char 型、short 型、および int 型には、エイリアス空間に対するバイト、ハーフワード、およびワードのストアまたはロードがそれぞれ生成されます。

Example 11では、bb.i のビットバンドアクセスが生成されます。

Example 11. ビットフィールドのビットバンドアクセス

typedef struct {
  char i :1;
  int j :2;
  int k :3;
} BB __attribute__((bitband));

BB bb __attribute__((at(0x20000004)));

void foo()
{
  bb.i = 1;
}

__attribute__((at())) を使用せずにビットバンド変数をビットバンド領域に格納する場合、別の方法を使用して再配置する必要があります。その場合は、適切なスキャッタロード記述ファイルを使用するか、リンカのコマンドラインオプション --rw_base を使用します。詳細については、『リンカリファレンス』を参照して下さい。

Show/hide制約条件

次の使用制限があります。

  • この型属性は struct でのみ使用できます。共用体型、または共用体をメンバとして持つその他の集合型はビットバンド化できません。

  • 構造体のメンバは個別にビットバンド化できません。

  • ビットバンドアクセスは、シングルビットのビットフィールドでのみ生成されます。

  • const オブジェクト、ポインタ、およびローカルオブジェクトについては、ビットバンドアクセスは生成されません。

  • ビットバンディングが利用できるのは一部のプロセッサに限られます。例えば、Cortex-M3 や Cortex-M4 プロセッサが該当します。

Show/hide関連項目

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0491EJ
Non-ConfidentialID081711