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

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

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

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

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

4,课堂总结(掌握)

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

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

适用场合如:

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

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

answer:中断和任务调度

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

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

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

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

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

函数

描述

taskENTER_CRITICAL()

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

taskEXIT_CRITICAL()

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

taskENTER_CRITICAL_FROM_ISR()

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

taskEXIT_CRITICAL_FROM_ISR()

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

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

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

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

 特点:

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

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

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

函数

描述

vTaskSuspendAll()

挂起任务调度器

xTaskResumeAll()

恢复任务调度器

 使用格式示例:

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

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

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

四、课堂总结

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

I am Supreme

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值