4.18 --bitband コンパイラコマンドラインオプション

--bitband コマンドラインオプションは、 const 以外のすべてのグローバル構造体オブジェクトをビットバンド化します。

以下の例では、--bitbandfoo.c に適用された場合、value.i への書き込みがビットバンド化されます。すなわち、value.i がビットバンド領域にマップするビットバンドエイリアスワードに、値 0x00000001 が書き込まれます。
value.j および value.k へのアクセスは、ビットバンド化されません。
/* foo.c */
typedef struct{
  int i : 1;
  int j : 2;
  int k : 3;
} BB;
BB value __attribute__((at(0x20000040))); // 配置済みのオブジェクト
void update_value(void)
{
  value.i = 1;
  value.j = 0;
}
/* foo.c の終わり */
armcc は、絶対アドレスでアクセスされるオブジェクトのビットバンディングをサポートします。--bitband が以下の例の foo.c に適用された場合、rts へのアクセスがビットバンド化されます。
/* foo.c */
typedef struct{
  int rts : 1;
  int cts : 1;
  unsigned int data;
} uart;
#define com2 (*((volatile uart *)0x20002000))
void put_com2(int n)
{
  com2.rts = 1;
  com2.data = n;
}
/* foo.c の終わり */
関連する概念
4.16 ビットバンディングに対するコンパイラおよびプロセッササポート
4.17 __attribute__((bitband)) コンパイラ型属性
4.19 ビットバンド領域の外に配置されたビットバンドオブジェクトをコンパイラが処理する方法
関連する参考文書
10.58 __attribute__((bitband)) 型属性
10.64 __attribute__((at(address))) 変数属性
8.17 --bitband
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.