Возьмем следующий пример кода:
static volatile bool pending = false;
void __attribute__((interrupt(TIMER0_A0_VECTOR))) TIMER0_A0_ISR (void)
{
pending = true;
}
int main(void)
{
while(true) {
if (!pending)
sleep();
pending = false;
// do stuff
}
}
Предположим, что функция ожидания переводит оборудование в спящий режим, а прерывание вызывает аппаратные средства, так что функция ожидания возвращается сразу после прерывания.
Здесь есть условие гонки: если прерывание происходит после оператора if, но перед сном, мы спим до следующего прерывания. Это проблема в моем реальном аналоге этого кода. Как я могу избежать этой проблемы?
Я работаю с msp430g2433.