FreeRTOS实时操作系统(五)临界区及任务调度器

系列文章目录


文章目录

  • 系列文章目录
  • 临界区代码保护
  • 任务调度器的挂起与保护

临界区代码保护

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

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

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

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

FreeRTOS实时操作系统(五)临界区及任务调度器_第1张图片

中断临界区:
进入:taskENTER_CRITICAL_FROM_ISR()
退出:taskEXIT_CRITICAL_FROM_ISR()
FreeRTOS实时操作系统(五)临界区及任务调度器_第2张图片

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

其实在内部是通过一个累计量来实现嵌套的,本质上还是对中断的屏蔽和打开:
FreeRTOS实时操作系统(五)临界区及任务调度器_第3张图片

任务调度器的挂起与保护

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

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

FreeRTOS实时操作系统(五)临界区及任务调度器_第4张图片
当我们的任务临界区比较长的时候,可能会产生延时中断,挂起任务调度器可以应用在任务内部的临界区,这样其他任务无法抢占,但是又能响应中断。

内部分析:
在其内部是利用PendSV中断来实现切换的。
在这里插入图片描述
挂起的主要内部函数是:
FreeRTOS实时操作系统(五)临界区及任务调度器_第5张图片
FreeRTOS实时操作系统(五)临界区及任务调度器_第6张图片
FreeRTOS实时操作系统(五)临界区及任务调度器_第7张图片

恢复的主要流程是:

FreeRTOS实时操作系统(五)临界区及任务调度器_第8张图片
FreeRTOS实时操作系统(五)临界区及任务调度器_第9张图片

你可能感兴趣的:(FreeRTOS,stm32,FreeRTOS,嵌入式操作系统)