为什么我不能使用值取决于中断标志的全局 bool 变量?

Why can't I use a global bool variable whose value depends on interrupt flags?

我正在尝试等待中断以继续执行代码,如下所示:

bool flag = false;

void interrupt_handler (uintptr_t context)
{
    flag = true;
}

void main()
{
    CallbackRegister(event, interrupt_handler,0);
    while(!flag);
}

但即使发生中断,它也始终停留在while循环中。有谁知道为什么? 我目前正在使用带有 SAMD21J17 微控制器的 MPLABX。

嗯。我不知道那个特定的编译器,但快速检查一下微芯片编译器 user guide 说了一些我立即跳出来的东西。

您有一个名为中断处理程序的函数,但您没有用装饰器标识它。我建议您查看本指南第 5.8.1 节“编写中断服务程序”,其中说“使用 __interrupt() 说明符编写每个 ISR 原型”。

所以你的例程至少应该是这样的:

void __interrupt(high_priority) interrupt_handler (uintptr_t context) {
    flag = true;
}

您需要更改:

bool flag = false;

至:

volatile bool flag = false;

原因是没有volatile允许编译器假定标志在读取一次后永远不会改变,但您希望它重复读取标志。