組込み・ファームウェア

割り込みハンドラの中で避けるべきこととして最も適切なものはどれか。

  1. Aフラグ変数に1を書いて、メイン処理に知らせること
  2. B割り込みの原因を示すビットを消すこと
  3. Cprintfでの長い文字列の出力や、何かが起こるまで待ち続けるループのような時間のかかる処理
答えと解説を見る

正解:C. printfでの長い文字列の出力や、何かが起こるまで待ち続けるループのような時間のかかる処理

割り込みハンドラが長く動いていると、その間はほかの割り込みに応えられず、メイン処理も止まります。printfは出力が終わるまで時間がかかり、中で割り込みを使うこともあるので特に危険です。ハンドラでは、データを受け取ってバッファに入れる、フラグを立てるといった最小限の処理だけを行い、重い処理はメイン処理やタスクに任せます。原因のビットを消すことも忘れてはいけません。

  • A. 短い処理でメイン処理に知らせるのは良い方法です。
  • B. 原因のビットを消さないと、同じ割り込みが繰り返し起きます。
  • C. 正しい。ほかの割り込みやメイン処理を長く止めてしまいます。
この分野を解く 分野ページへ

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

  1. 上のプログラムを最適化を有効にしてコンパイルすると、タイマ割り込みが起きてもled_on()が呼ばれないことがある。原因と対策の組み合わせとして正しいものはどれか。
  2. 8ビットのマイコンで、タイマ割り込みが32ビットの変数ticksを1ずつ増やし、メイン処理がticksを読んで経過時間を求めている。まれに大きくずれた値が読めてしまう原因として正しいものはどれか。
  3. UARTによるシリアル通信の特徴として正しいものはどれか。
  4. 115200 bpsのUARTで、データ8ビット・パリティなし・ストップビット1(8N1)の形式で送るとき、1秒間に送れるバイト数に最も近いものはどれか。
  5. UARTの送信側と受信側のボーレートが少しずれていると、文字化けが起こることがある。ずれの許容範囲がおよそ数%程度に限られる理由として正しいものはどれか。