組込み・ファームウェア

C言語のビットフィールドを使った構造体で周辺回路のレジスタを表すとき、注意が必要な点として正しいものはどれか。

  1. Aビットフィールドを使うと、プログラムが必ず2倍速くなる
  2. Bビットフィールドのビットの並び順などはコンパイラによって違ってよいので、別のコンパイラでは意図と違うビットを操作することがある
  3. Cビットフィールドは、8ビット以上の値を表せない
答えと解説を見る

正解:B. ビットフィールドのビットの並び順などはコンパイラによって違ってよいので、別のコンパイラでは意図と違うビットを操作することがある

ビットフィールドは読みやすく書けますが、C言語の規格では、構造体の中でビットを上位から並べるか下位から並べるか、欄が境界をまたぐときの扱い、アクセスの幅などが処理系に任されています。そのため、あるコンパイラで正しく動いても、別のコンパイラやCPUでは違うビットを読み書きすることがあります。マイコンの会社が用意するヘッダは、マスクとシフトで書かれていることが多いです。

  • A. 速さが必ず上がるわけではありません。
  • B. 正しい。移植性に注意が必要です。
  • C. 8ビット以上の欄も表せます。
この分野を解く 分野ページへ

組込み・ファームウェアのほかの問題

  1. 多くのマイコンで、変更しない大きな表(フォントのデータなど)をconstを付けて宣言する利点として正しいものはどれか。
  2. JTAGやSWDといったデバッグ用のインターフェースでできることとして正しいものはどれか。
  3. 1 msごとに一定の制御の計算を行いたい。OSを使わないマイコンでの実装として最も適切なものはどれか。
  4. マイコンのブラウンアウト検出(BOD、ブラウンアウトリセット)の役割として正しいものはどれか。
  5. 割り込みに優先度を付けられるマイコンで、優先度の低い割り込みのハンドラを実行中に、優先度の高い割り込みが起きた。一般にどうなるか(割り込みのネストを許す設定とする)。