)
临界段用一句话概括就是一段在执行的时候不能被中断的代码段。在 FreeRTOS 里面这个临界段最常出现的就是对全局变量的操作。那么什么情况下临界段会被打断一个是系统调度还有一个就是外部中断。系统调度最终也是产生 PendSV 中断在 PendSV Handler 里面实现任务的切换所以还是可以归结为中断。所以对临界段的保护最终可以归结于对中断的开和关的控制。CPSID I;PRIMASK1//关中断CPSIE I;PRIMASK0//开中断CPSID F;FAULTMASK1//关异常CPSIE F;FAULTMASK0//开异常名字功能描述PRIMASK这是个只有单一比特的寄存器。 在它被置 1 后就关掉所有可屏蔽的异常只剩下 NMI 和硬 FAULT可以响应。它的缺省值是 0表示没有关中断。FAULTMASK这是个只有 1 个位的寄存器。当它置 1 时只有 NMI 才能响应所有其它的异常甚至是硬 FAULT也通通闭嘴。它的缺省值也是 0表示没有关异常。BASEPRI这个寄存器最多有 9 位由表达优先级的位数决定。它定义了被屏蔽优先级的阈值。当它被设成某个值后所有优先级号大于等于此值的中断都被关优先级号越大优先级越低。但若被设成 0则不关闭任何中断 0 也是缺省值。