如果中断处理程序和一个函数共享数据,直接在该函数中关中断和开中断并不是最好的方法.
int a,b,c;
void interrupt update(void) //中断处理程序
{
a++;
b++;
c++;
}
void get_abc_value(void)
{
disable(); //关中断
return a*100+b*10+c;
enable(); //开中断
}
如果函数get_abc_value()在别的临界区中被调用,
void other_func(void)
{
disable();
get_abc_value();
.......//do something
enable();
}
则在该临界区中打开了被关闭的中断.会造成意想不到的错误.
如果disable()不仅能关中断,还能返回一个逻辑值表明在它被调用时中断是否被禁止,则正确的做法是下面这样
void get_abc_value(void)
{
bool old_interrupt_state=false;//默认关闭
old_interrupt_state = disable(); //关中断
return a*100+b*10+c;
if(old_interrupt_state)//如果原来中断是开启的,则开启中断
enable(); //开中断
}