基本介绍
临界区代码指的是那些必须完整执行、不能被打断的代码,比如在初始化一些外设的时候,需要按照严格的时序进行,这样的代码是不能被中断打断的。
Free RTOS在进入临界区代码时,需要关闭中断,当临界区代码完整执行后再打开中断。
临界区代码一定要尽可能精简,进入临界区关闭中断后,优先级低于configMAX_SYSCALL_INTERRUPT_PRIORITY
的中断不会被及时响应。
简单的说原理嘛,就是要运行临界区代码的时候,先把全局中断关了,防止运行临界区代码的时候,被中断打断,等代码运行完了,再把全局中断打开。
Free RTOS中临界区代码常用函数
taskENTER_CRITICAL(); //任务级临界代码保护
taskEXIT_CRITICAL();
taskENTER_CRITICAL_FROM_ISR(); //中断级临界代码保护
taskEXIT_CRITICAL_FROM_ISR();
任务级临界代码保护
调用方式
taskENTER_CRITICAL()
和taskEXIT_CRITICAL()
是任务级的临界代码保护,顾名思义,一个是进入临界区,一个是退出临界区。在使用时,一定要成对使用,并且保证不能在临界区停留过久,进入临界区后应当尽快退出。
一般使用方式:
void taskCritical_test(void){
while(1){
taskENTER_CRITICAL();
/*这里是你的任务代码*/