我正在写一个C程序来编程微控制器。在实践中,当中断处理程序发生时,我执行以下代码:
uint8_t call_irq_handler = 0; // variable that is modified by the irq handler
uint8_t call_irq_handler_previous = 0;
static __attribute__((interrupt)) void __irq_handler()
{
call_irq_handler_previous = call_irq_handler;
call_irq_handler = call_irq_handler + 1;
}
在main中,为了等待中断处理程序执行,我输入了下面的while循环:
while (call_irq_handler == call_irq_handler_previous)
{
count_cmd_write++;
#if DEBUG
printf("...i didn't get interrupt handler for cmd_write...n");
#else
continue;
#endif
}
如果我设置DEBUG 1,我没有问题,代码被执行,并在一段时间后退出while循环。然而,如果DEBUG 0,那么我仍然在while中,因此中断处理程序没有被占用。有人知道为什么会这样吗?
我通过插入volatile
来解决这个问题volatile uint8_t call_irq_handler = 0; // variable that is modified by the irq handler
volatile uint8_t call_irq_handler_previous = 0;