組込み・ファームウェア

LEDをつないだ出力端子のビットを、実行するたびに点灯と消灯で切り替えたい。C言語の書き方として正しいものはどれか。

  1. Aport |= (1 << 5);
  2. Bport ^= (1 << 5);
  3. Cport &= ~(1 << 5);
答えと解説を見る

正解:B. port ^= (1 << 5);

排他的論理和(XOR、^)は、1とのXORでビットが反転し、0とのXORでは変わりません。そのため「port ^= (1 << 5)」を実行するたびに、ビット5だけが0と1の間で切り替わります。LEDの点滅などによく使います。マイコンによっては、書き込むだけでビットを反転できる専用のレジスタを持つものもあります。

  • A. これは常に1にするだけで、切り替わりません。
  • B. 正しい。XORで1のビットを反転させます。
  • C. これは常に0にするだけで、切り替わりません。
この分野を解く 分野ページへ

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

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