嵌入式與韌體
將上面的程式啟用最佳化進行編譯後,即使發生計時器中斷,有時也不會呼叫led_on()。原因與對策的組合,下列何者正確?
int flag = 0;
void timer_isr(void) { flag = 1; }
int main(void) {
while (flag == 0) { }
led_on();
}
- A因為編譯器只讀取flag一次,不會在迴圈中重新讀取。對flag加上volatile
- B因為發生中斷時flag會被重設為0。將flag改為long
- C因為while內容為空時CPU會停止。在迴圈中加入加法運算