次のコードがあるとします。
static volatile float32_t tst_mtr_dutycycle;
static volatile uint8_t tst_mtr_direction;
static volatile uint32_t tst_mtr_update;
void TST_MTR_Task(void)
{
if (tst_mtr_update == 1U)
{
tst_mtr_update = 0;
MTR_SetDC(tst_mtr_dutycycle, tst_mtr_direction);
}
}
MISRA C 2012 Rule-13.2に問題があることがわかったので、調査することにしました。私はここ(http://archive.redlizards.com/docs/misrac2012-datasheet.pdf)で次のことを見つけました:
1 つのシーケンス ポイント内で volatile 修飾された型の読み取りアクセスが 1 つだけであること
ここでの問題は、1 つのシーケンス ポイント内で volatile 修飾された型の読み取りアクセスが 1 つしかない理由を明確にする例や説明を見つけることができなかったことです。
違反しているコードの解決策を見つける必要がありますが、どうすればよいかわかりません。
これで、1 つのシーケンス ポイント内で volatile 修飾された型の読み取りアクセスが 1 つしかないことがわかりました。問題は、なぜですか?解決策を実装するために理由を知り、コードを変更する理由をここにいる全員に説明する必要があります。
よろしく。