八、FreeRTOS之FreeRTOS临界段代码保护及调度器挂起与恢复

本节主要需要掌握以下内容:

1,临界段代码保护简介(熟悉)

2,临界段代码保护函数介绍(掌握)

3,任务调度器的挂起和恢复(熟悉)

4,课堂总结(掌握)

一、临界段代码保护简介(熟悉)

什么是临界段:临界段代码也叫做临界区,是指那些必须完整运行,不能被打断的代码段

适用场合如:

  • 外设:需严格按照时序初始化的外设:IICSPI等等
  • 系统:系统自身需求
  • 用户:用户需求

问题1:什么可以打断当前程序的运行?

八、FreeRTOS之FreeRTOS临界段代码保护及调度器挂起与恢复_第1张图片

answer:中断和任务调度

问题2:那如何程序不被打断呢?

八、FreeRTOS之FreeRTOS临界段代码保护及调度器挂起与恢复_第2张图片

answer:关中断!那么中断就打断不了当前任务了,而任务调度也就不能了。因为PendSV就是实现任务切换的一个中断,而这个中断我们设置的是最低优先级。那么我们直接关中断,那么最低优先级的中断PendSV也就无法响应了。

二,临界段代码保护函数介绍(掌握)

FreeRTOS 在进入临界段代码的时候需要关闭中断,当处理完临界段代码以后再打开中断。

保证临界区代码不会被打断。

函数

描述

taskENTER_CRITICAL()

任务级进入临界段,其实就是关中断

taskEXIT_CRITICAL()

任务级退出临界段,其实就是开中断

taskENTER_CRITICAL_FROM_ISR()

中断级进入临界段,其实就是关中断

taskEXIT_CRITICAL_FROM_ISR()

中断级退出临界段,其实就是开中断

其实底层就调用的 开关中断函数,感兴趣的小伙伴可以跟进去看!

 任务级临界区调用格式示例:

八、FreeRTOS之FreeRTOS临界段代码保护及调度器挂起与恢复_第3张图片

中断级临界区调用格式示例:

八、FreeRTOS之FreeRTOS临界段代码保护及调度器挂起与恢复_第4张图片

 特点:

  • 成对使用
  • 支持嵌套
  • 尽量保持临界段耗时短(关中断太久了,就会造成中断延时,在一些系统里是不被允许的)并且 临界区是直接屏蔽了中断,系统任务调度靠中断,ISR也靠中断

三,任务调度器的挂起和恢复(熟悉)

挂起任务调度器, 调用此函数不需要关闭中断

函数

描述

vTaskSuspendAll()

挂起任务调度器

xTaskResumeAll()

恢复任务调度器

 使用格式示例:

八、FreeRTOS之FreeRTOS临界段代码保护及调度器挂起与恢复_第5张图片

1、与临界区不一样的是,挂起任务调度器,未关闭中断;

2、它仅仅是防止了任务之间的资源争夺,中断照样可以直接响应;

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

四、课堂总结

八、FreeRTOS之FreeRTOS临界段代码保护及调度器挂起与恢复_第6张图片

你可能感兴趣的:(FreeRTOS实时操作系统,嵌入式软件)