当前位置: 首页 > news >正文

任务的调度 与任务的状态

一,任务调度是什么?

        调度器就是使用相关的调度算法来决定当前需要执行的哪个任务。

        FreeRTOS中开启任务调度的函数是 vTaskStartScheduler() ,

        但在 CubeMX 中被封装为osKernelStart() 。

二,在FreeRTOS中,任务调度是什么样的?

        FreeRTOS 是一个实时操作系统,它所奉行的调度规则:

        1. 高优先级抢占低优先级任务,系统永远执行最高优先级的任务(即抢占式调度)

        2. 同等优先级的任务轮转调度(即时间片调度)

        抢占式调度运行过程

        

        1. 高优先级任务,优先执行;

        2. 高优先级任务不停止,低优先级任务无法执行;

        3. 被抢占的任务将会进入就绪态

        

        时间片调度运行过程

        

        1. 同等优先级任务,轮流执行,时间片流转;

        2. 一个时间片大小,取决为滴答定时器中断周期;

        3. 注意没有用完的时间片不会再使用,下次任务 Task3 得到执行,还是按照一个时间片的时钟节拍运行

三,任务的状态

        FreeRTOS中任务共存在4种状态:

        Running 运行态

                当任务处于实际运行状态称之为运行态,即CPU的使用权被这个任务占用(同一时间仅一个任务处于运行态)。

        Ready 就绪态

                处于就绪态的任务是指那些能够运行(没有被阻塞和挂起),但是当前没有运行的任务,因为同优先级或更高优先级的任务正在运行。

        Blocked 阻塞态

                如果一个任务因延时,或等待信号量、消息队列、事件标志组等而处于的状态被称之为阻塞态。

        Suspended 挂起态

                类似暂停,通过调用函数 vTaskSuspend() 对指定任务进行挂起,挂起后这个任务将不被执行,只有调用函数 xTaskResume() 才可以将这个任务从挂起态恢复。

        


http://www.mrgr.cn/news/51676.html

相关文章:

  • 【大模型问答测试】大模型问答测试脚本实现(第二版)——接入pytest与代码解耦
  • git tag 用法
  • 大厂面试真题-具体说说jdk1.7和1.8的hashmap的线程不安全都有什么问题
  • Windows模拟电脑假死之键盘鼠标无响应
  • 单片机裸机程序 —— 设计模式
  • 一文详解线程池
  • VsCode环境配置C++环境
  • Git的认识及基本操作
  • Mybatis核心配置文件的详解
  • Python学习---主要内置函数记录
  • 编译器对连续构造的优化
  • 本地如何使用Pycharm连接远程服务器调试torchrun
  • GitHub每日最火火火项目(10.16)
  • C语言之练习题
  • 一款非常有用且高效的国产的Linux运维面板:1Panel介绍
  • Opencv形态学的膨胀操作、开运算与闭运算、梯度运算、礼帽与黑帽操作
  • [Java基础] 流程控制
  • 【STM32单片机_(HAL库)】6-6-2【串口通信UART、USART】【蓝牙遥控插座项目】项目实现
  • pandas 数据分析实战
  • 字典树 计数问题(含 2022 icpc杭州 K)