FreeRTOS-临界段代码保护及任务调度器挂起与恢复

一.临界段代码保护简介

1.什么是临界段?

临界段代码保护也叫临界区(直接屏蔽中断),指必须完整运行,不能被打断的代码段。

使用场景:(1)外设初始化,如:IIC、SPI等时序要求严格的外设,初始化的过程不能被打断。

                  (2)系统自身需求,如:FreeRTOS源码中,部分代码不可被打断。

                  (3)用户需求,如:使用start_Task任务,创建其他任务,我们使用临界段代码保护,使任务创建的过程无法打断。

2.什么可以打断当前运行的程序?

(1)中断(优先级5-15)      (2)任务调度

故FreeRTOS在进入临界段代码时,需要关中断,当处理完临界段代码才开中断。

3.临界段代码保护相关API函数

前两个为任务级,后面两个为中断级

taskENTER_CRITICAL()                          //任务级进入临界段

taskEXIT_CRITICAL()                              //任务级退出临界段

taskENTER_CRITICAL_FROM_ISR()     //中断级进入临界段

taskEXIT_CRITICAL_FROM_ISR()         //中断级退出临界段

FreeRTOS-临界段代码保护及任务调度器挂起与恢复_第1张图片

FreeRTOS-临界段代码保护及任务调度器挂起与恢复_第2张图片

4.临界段代码保护函数特点

(1)成对使用,有进入,就必须有退出。     (2)支持嵌套     (3)保护的代码段耗时必须短

二.任务调度的挂起与恢复

(1)挂起任务调度器:单纯挂起调度器使任务调度器无法调度,但中断正常

特点:与临界区不一样,挂起任务调度器后,不关闭中断

           防止任务之间的资源抢夺,中断照样直接响应。

           挂起任务调度器的方式,适用于临界区位于任务与任务之间;既不用延时中断,又可以做到临界区保护

(2)任务调度器挂起与恢复相关API函数

vTaskSuspendAll()         //挂起任务调度器

xTaskResumeAll()          //恢复任务调度器

函数实现逻辑:

FreeRTOS-临界段代码保护及任务调度器挂起与恢复_第3张图片

 

你可能感兴趣的:(stm32,单片机)