FreeRTOS实时操作系统(五)进入临界区、任务调度器挂起与恢复

系列文章

FreeRTOS实时操作系统(一)RTOS的基本概念

FreeRTOS实时操作系统(二)任务创建与任务删除(HAL库)

FreeRTOS实时操作系统(三)任务挂起与恢复

FreeRTOS实时操作系统(四)中断任务管理

FreeRTOS实时操作系统(五)进入临界区、任务调度器挂起与恢复

FreeRTOS实时操作系统(六)列表与列表项

FreeRTOS实时操作系统(七)时间片调度及RTOS的滴答定时器

FreeRTOS实时操作系统(八)任务状态查询及时间统计函数

FreeRTOS实时操作系统(九)时间延时函数及消息队列

FreeRTOS实时操作系统(十)信号量

FreeRTOS实时操作系统(十一)队列集

FreeRTOS实时操作系统(十二)事件标志组

FreeRTOS实时操作系统(十三)任务通知

FreeRTOS实时操作系统(十四)软件定时器

FreeRTOS实时操作系统(十五)Tickless低功耗模式

FreeRTOS实时操作系统(十六)内存管理


临界区代码保护

临界区:是指那些必须要完整运行的,不能被打断的代码

适用于:
1.外设初始化
2.操作系统的代码有很多不能被打断
3.用户自己的需求

一般在中断、任务调度抢占会打断程序。但是在FreeRTOS中,因为任务抢占中断PendSV也在其5-15的优先级管理范围内,只要关闭中断后就完成无法进行任务的抢占和中断。

任务临界区:
进入:taskENTER_CRITICAL()
退出:taskEXIT_CRITICAL()

在这里插入图片描述

中断临界区:
进入:taskENTER_CRITICAL_FROM_ISR()
退出:taskEXIT_CRITICAL_FROM_ISR()
在这里插入图片描述

注意:可以嵌套使用,但是必须要保持临界区耗时短,且要成对

其实在内部是通过一个累计量来实现嵌套的,本质上还是对中断的屏蔽和打开:
在这里插入图片描述

任务调度器的挂起与恢复

对任务管理器的处理,不关闭中断,仅仅防止了任务之间的资源争夺,中断还是可以直接相应

挂起任务调度器:vTaskSuspendAll()
恢复任务调度器:xTaskResumeAll()

在这里插入图片描述
当我们的任务临界区比较长的时候,可能会产生延时中断,挂起任务调度器可以应用在任务内部的临界区,这样其他任务无法抢占,但是又能响应中断。

内部分析:
在其内部是利用PendSV中断来实现切换的。
在这里插入图片描述
挂起的主要内部函数是:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

恢复的主要流程是:

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值