組込み・ファームウェア

1 msごとに一定の制御の計算を行いたい。OSを使わないマイコンでの実装として最も適切なものはどれか。

  1. A1 msごとのタイマ割り込みでフラグを立て、メインのループがフラグを見て計算を行う
  2. Bメインのループの中に、だいたい1 msかかりそうな空のループを入れて間隔を作る
  3. C計算が終わるたびにマイコンを再起動する
答えと解説を見る

正解:A. 1 msごとのタイマ割り込みでフラグを立て、メインのループがフラグを見て計算を行う

空のループで時間を作ると、ほかの処理にかかる時間やコンパイラの最適化によって間隔が変わり、正確になりません。ハードウェアのタイマは処理に関係なく正確に数えるので、1 msごとの割り込みを基準にすれば一定の間隔を保てます。計算が短ければ割り込みの中で直接行うこともできますが、長い場合はフラグで知らせてメインのループで行うと、ほかの割り込みを妨げません。

  • A. 正しい。ハードウェアのタイマで正確な間隔を作れます。
  • B. ほかの処理の時間で間隔が変わり、正確になりません。
  • C. 再起動は必要ありません。
この分野を解く 分野ページへ

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

  1. マイコンのブラウンアウト検出(BOD、ブラウンアウトリセット)の役割として正しいものはどれか。
  2. 割り込みに優先度を付けられるマイコンで、優先度の低い割り込みのハンドラを実行中に、優先度の高い割り込みが起きた。一般にどうなるか(割り込みのネストを許す設定とする)。
  3. C言語で、レジスタregのビット3だけを1にし、ほかのビットは変えない書き方として正しいものはどれか。
  4. C言語で、レジスタregのビット3だけを0にし、ほかのビットは変えない書き方として正しいものはどれか。
  5. LEDをつないだ出力端子のビットを、実行するたびに点灯と消灯で切り替えたい。C言語の書き方として正しいものはどれか。