1:临界段代码保护(熟悉)
def :临界段也可以称之为临界区,是那些必须完整运行,不能被打断的代码段(将代码编写在林临界区内可以不受中断的干扰,完整的执行)。
注:
-
外设----> 需严格按照时序初始化外设IIC,SPI等等
-
系统-----> 系统自身的需求
-
用户------>用户自身的需求
可以打断程序运行的是:中断和任务调度
- // 这里的进入临界段表示的就是关闭中断的意思
- // 退出临界段表示的就是开启中断的意思
注: 后面的两个是在中断服务函数中调用的表示的也是关闭中断和开启中断的意思
临界段代码保护函数介绍
freeRTOS在进入临界段代码的时候需要关闭中断,当处理完临界段代码以后打开中断
函数 | 描述 |
taskENTER_CRITICAL() | 任务级进入临界段 |
taskEXIT_CRITICAL() | 任务级退出临界段 |
taskENTER_CRITICAL_FROM_ISR() | 中断级进入临界段 |
taskEXIT_CRITICAL_FROM_ISR() | 中断级退出临界段 |
特点:成对使用,支持嵌套,尽量保持临界段耗时短,强悍
使用例子:
2:临界段代码保护介绍(掌握)
......................
3:任务调度器的挂起和恢复
挂起任务调度器:调用此函数不需要关闭中断,任务调度器使用格式如下所示
函数 | 描述 |
vTaskSuspendAll() | 挂起任务调度器 |
xTaskResumeAll () | 恢复任务调度器 |
1:任务调度器:挂起任务调度器(任务调度器里面的内容是不允许被其他的内容打断的但是可以被中断打断)和临界区的区别是,挂起任务调度器是没有关闭中断的
2:可以防止任务之间的资源争夺,中断还是可以直接响应的
3:挂起任务调度器的方式,适用于临界区位于任务与任务之间,既不用去延时中断又可以保证临界区的安全