C言語で、ピット単位のデータアクセスを可能とする為の構造体に対する記述方法。
好きなビット幅の構造体メンバーを作成できるので、ビットごとに意味を持たせたい場合に、処理の記述をシンプルにする事が可能。
typedef struct s_DataType { char b0 :1; // 1ビット幅メンバー b0 char b1_7 :7; // 7ビット幅メンバー b1_7 } DataType; int foo{ DataType d; d.b0 = 1; d.b1_7 = 0; ASSERT(*((char*)&d) == 0x01); }
但し、ビットフィールドの記述がLSB側からかMSB側からかは処理系依存となっている為確認が必要。
組み込みマイコンでは、例えば8ビットをひとまとめとしたGPIOのデータレジスタにビット単位で適用した場合、結果としてポート単位のGPIOアクセスを記述できるなど便利に使用できる。
しかし、一般にGPIOその他周辺ペリフェラルのレジスタは、「リード/ライト可能」、「ライトのみ」または「リードのみ」とアクセス方法が分かれている場合があり、一般的な処理系において、ビットフィールドでのビット単位の更新を行えるのは「リード/ライト可能」なレジスタのみである。これについては、マイコンであればマイコンの仕様書に掲載されているので参照のこと。
(プロセッサの命令セットでビット単位の値変更をサポートする命令があり、コンパイラのビットフィールド宣言時、内部でそれを使用するようになっている場合、この限りではない)