ロング長(32ビット/4バイト)の変数を読み取るときに、
マイコンによっては 1命令で読み取れるものと、16ビットずつ 2命令で読み取るものとがあります。
具体例: ルネサス H8マイコンは 1命令、 ルネサス RL78マイコンは 2命令
2命令で読み取るマイコンの場合、注意しないと以下のような不具合が発生することがあります。
・不具合例
ロング長の変数をタイマー割り込み内でカウントアップし、その値をメイン処理で参照するものとします。
RL78マイコンはリトルエンディアンで、ロング長の変数の下位の16ビットを読み取った後、
上位16ビットを読み取るという順になります。
このとき例えば、変数が0x0001FFFFのときにメイン処理で変数の読取りを開始して、
下位の16ビット(0xFFFF)を読み取った直後に割り込みが発生したとします。
割り込み内で変数をカウントアップすると、値は0x00020000になります。
この後、メイン処理でカウンター値の上位の16bit(0x0002)を読み取ると、
ロング長のカウンター値は0x0002FFFFとなって
本来 0x00020000 であるべき値を0x0002FFFFと誤ってしまうことになります。
上記のような場合は、割り込み禁止にしてから変数を参照し、割り込み許可に戻す必要があります。