存在的问题
f1()
{
disable_int
do_something
enable_int
}
f2()
{
disable_int
f1();
do_something
enable_int
}
如上代码存在临界段嵌套问题,f1执行完后就打开中断了,所以f2的do_something不处于临界段中
解决方法
以FreeRTOS为例子
非中断中,增加全局变量记录嵌套次数,只有为0时才使能中断
中断中,通过备份basepri来实现嵌套,如果存在嵌套,则嵌套中写入basepri的是上次写入的值,而上次写入的值是屏蔽freertos能管理的所有中断,则中断实际还未使能从而实现嵌套