組込み・ファームウェア
C言語のビットフィールドを使った構造体で周辺回路のレジスタを表すとき、注意が必要な点として正しいものはどれか。
- Aビットフィールドを使うと、プログラムが必ず2倍速くなる
- Bビットフィールドのビットの並び順などはコンパイラによって違ってよいので、別のコンパイラでは意図と違うビットを操作することがある
- Cビットフィールドは、8ビット以上の値を表せない
答えと解説を見る
正解:B. ビットフィールドのビットの並び順などはコンパイラによって違ってよいので、別のコンパイラでは意図と違うビットを操作することがある
ビットフィールドは読みやすく書けますが、C言語の規格では、構造体の中でビットを上位から並べるか下位から並べるか、欄が境界をまたぐときの扱い、アクセスの幅などが処理系に任されています。そのため、あるコンパイラで正しく動いても、別のコンパイラやCPUでは違うビットを読み書きすることがあります。マイコンの会社が用意するヘッダは、マスクとシフトで書かれていることが多いです。
- A. 速さが必ず上がるわけではありません。
- B. 正しい。移植性に注意が必要です。
- C. 8ビット以上の欄も表せます。