volatileとISR: 大切なこと
函数(main()
も含む)とISR
とで同じグローバル変数を共有する場合、その変数はvolatile
として宣言しなければなりません。
ISR
が実行されているかどうかは函数の側からは直接見えないため、その変数が函数のスコープ内で変化するかどうかはコンパイラーにはわからず、変数が定数に置き換えられてしまう可能性があります。コンパイルは正しく実行されるでしょうが、ISR
は何も実行してくれず、この注意事項を読んだことを思い出すまでに頭を10分間かくはめになるでしょう。
―――――――――――――――――――
ヴァラトゥル