組込み・ファームウェア

入力用のレジスタinのビット5が1かどうかを調べるC言語の条件として正しいものはどれか。

  1. Aif (in | (1 << 5))
  2. Bif (in == 5)
  3. Cif (in & (1 << 5))
答えと解説を見る

正解:C. if (in & (1 << 5))

「in & (1 << 5)」は、ビット5以外をすべて0にした値になるので、ビット5が1なら32(0以外で真)、0なら0(偽)になります。C言語では0以外が真なので、そのままif文の条件に使えます。結果を1か0にしたいときは「(in >> 5) & 1」と書きます。ORでは結果が必ず0以外になり、調べたことになりません。

  • A. ORの結果は常に0以外になり、いつも真になります。
  • B. 値が5かどうかを比べていて、ビット5とは関係ありません。
  • C. 正しい。ビット5以外を0にして残りを見ます。
この分野を解く 分野ページへ

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

  1. 上のコードは、レジスタregの複数ビットの設定欄を書き換えている。何をしているか。
  2. メイン処理でレジスタのビットを「reg |= mask;」(読み出し・変更・書き込み)で操作している最中に、割り込みハンドラが同じレジスタの別のビットを書き換えると起こりうる問題と対策の組み合わせとして正しいものはどれか。
  3. マイコンの入力端子にスイッチだけをつなぎ、プルアップやプルダウンの抵抗を付けなかった。スイッチが開いているときに起こりうることはどれか。
  4. マイコンのGPIO(汎用入出力)の端子を使うときに、最初に設定する必要があることとして正しいものはどれか。
  5. 機械式のスイッチを押したときに、接点が細かく跳ねて短い時間に何度もオンとオフを繰り返す現象を何と呼ぶか。