組込み・ファームウェア
8ビットのマイコンで、タイマ割り込みが32ビットの変数ticksを1ずつ増やし、メイン処理がticksを読んで経過時間を求めている。まれに大きくずれた値が読めてしまう原因として正しいものはどれか。
- A8ビットのマイコンでは、32ビットの変数は使えないから
- Bタイマ割り込みの周期が毎回ランダムに変わるから
- C32ビットの読み出しが4回に分かれ、その途中で割り込みが入って一部のバイトだけが新しい値になることがあるから
答えと解説を見る
正解:C. 32ビットの読み出しが4回に分かれ、その途中で割り込みが入って一部のバイトだけが新しい値になることがあるから
8ビットのマイコンは1回に1バイトしか読めないので、32ビットの値は4回に分けて読みます。例えば0x000000FFから0x00000100に変わる瞬間に、下位のバイトを読んだ後で割り込みが入ると、古い下位(0xFF)と新しい上位(0x01)を組み合わせた0x000001FFのような値になります。読む間だけ割り込みを禁止するか、2回読んで同じ値になるまで読み直すことで防ぎます。
- A. 使えますが、1回では読めません。
- B. 周期は一定です。
- C. 正しい。読む間だけ割り込みを禁止するなどで防ぎます。