freebsder 发表于 2020-3-10 21:50
__disable_irq(); __enable_irq(); 挺好的,或许是唯一可以通用的处理临界问题的手 ...
有一种芯片,用到单线收发数据,对时序的要求很严格,如果在通讯过程中被中断打断,就相当于把时序的拉长,导致通讯速率跟原来的不一致,进而通讯出错。
如果使用__disable_irq(); __enable_irq();的方式,在进行时序操作过程中,如果有多个函数进行开关总中断操作,例如
fun1()
{
__disable_irq();
......
__enable_irq();
}
fun2()
{
__disable_irq();
......
fun1();
......
__enable_irq();
}
这样就有可能出现fun1过早重新打开了总中断,从而导致通讯出错的可能.当然,你可以说把fun1和fun2合并成一个函数,这样就没问题了...但是从一般性来讲,有临界处理的方式,可以满足更多的应用需求.