【发布时间】:2013-01-12 23:44:36
【问题描述】:
我有一个禁用中断的函数,但问题是如果我禁用它们并调用一个也禁用/启用它们的函数,它们会过早重新启用。以下逻辑是否足以防止这种情况发生?
static volatile int IrqCounter = 0;
void EnableIRQ()
{
if(IrqCounter > 0)
{
IrqCounter--;
}
if(IrqCounter == 0)
{
__enable_irq();
}
}
void DisableIRQ()
{
if(IrqCounter == 0)
{
__disable_irq();
}
IrqCounter++;
}
【问题讨论】:
-
不应该反过来吗?当你启用时,你真的在 0 处启用并增加所有其他调用的计数,当你禁用时,你递减,当它变为零时,你调用真正的禁用?
-
@Jay MCU 启动时,默认情况下它们已经启用,所以这就是为什么我的逻辑看起来有点奇怪