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

FreeRTOS基础知识记录

FreeRTOS基础知识

1、任务调度简介
简述:调度器就是使用相关的调度算法来决定当前需要执行的任务

FreeRTOS一共支持三种任务调度方式
1、抢占式调度
主要针对优先级不同的任务,每个任务都有一个优先级,优先级高的任务可以抢占优先级低的任务
1. 高优先级任务,优先执行
2. 高优先级任务不停止,低优先级任务无法执行
3. 被抢占CPU的任务将会进入就绪态

2、时间片调度
主要针对优先级相同的任务,当多个任务优先级相同时,任务调度器会在每一次时间片到的时候切换任务
1. 同等优先级任务,轮流执行;时间片流转
2. 一个时间片大小,取决为滴答定时器中断频率
3. 注意任务中途被打断或阻塞,没有用完的时间片不会再使用,下次该任务得到执行还是按照一个时间片的钟时间进行

3、协程式调度
主要是函数调用,FreeRTOS现在虽然还支持,但是官方已经表示不再开发协程式调度

2、任务状态
FreeRTOS中任务共有4种状态:
1、运行态
正在执行的任务,该任务就处于运行态,注意在STM32中,同一时间仅一个任务处于运行态

2、就绪态
如果该任务已经能够被执行,但当前还未被执行,那么此任务处于就绪态

3、阻塞态
如果一个任务因延时或等待外部事件发生,那么这个任务就处于阻塞态

4、挂起态
类似暂停,调用函数vTaskSuspend()进入挂起态,需要调用解除挂起函数vTaskResume()才可以进入就绪态

注意:
1. 仅就绪态可转变成运行态
2. 其他状态的任务想运行,必须先转变成就绪态

就绪列表:pxReadyTasksLists[x],其中x代表任务优先级数值
阻塞列表:pxDelayedTaskList
挂起列表:pxSuspendedTaskList

调度器是会在所有处于就绪队列的任务中,选择具有最高优先级的任务来执行

http://www.dtcms.com/a/356552.html

相关文章:

  • MTK Linux DRM分析(二十)- KMS drm_mm.c drm_vma_manager.c
  • Docker部署单节点使用KRaft存储数据的Kafka与可视化界面Kafka-Map
  • el-table合并列实例
  • 云市场周报 (2025.08.29):解读阿里云g8y、腾讯云Serverless容器与FinOps趋势
  • 神经语言学与脑科学启发的NLP深层分析:从统计拟合到机制理解的范式转变
  • LeetCode 317 离建筑物最近的距离
  • Spring Boot 整合 MongoDB:CRUD 与聚合查询实战
  • vscode优化合集 - Visual Studio Code
  • TensorFlow 面试题及详细答案 120道(51-60)-- 模型保存、加载与部署
  • 字典解密助手ArchiveHelperWpfv1.0.12详细使用说明书
  • [awesome-nlp] docs | 精选NLP资源 | 分类
  • DVWA靶场通关笔记-暴力破解(Impossible级别)
  • Spring框架集成Kakfa的方式
  • 网络与信息安全有哪些岗位:(12)威胁分析师
  • LeetCode算法日记 - Day 25: 数组中的第K个最大元素、库存管理III
  • Docker的常用命令及简单使用
  • More Effective C++ 条款15:了解异常处理(exception handling)的成本
  • 判断语句中std::cin隐式转换为bool--重载operator bool()
  • Point Transformer V3(PTv3)【3:上采样unpooling】
  • 【C++详解】C++11(一) 列表初始化、右值引⽤和移动语义
  • 【查看css技巧】hover或者其他方式触发出来的样式如何查看
  • Linux网络基础1(一)之计算机网络背景
  • Java常用工具类
  • python 日常学习记录
  • rust打包增加图标
  • 中国国际商会副秘书长徐梁一行到访国联股份
  • Daily Review
  • 查看docker容器内部的环境变量并向docker容器内部添加新的环境变量
  • Java试题-选择题(21)
  • linux学习-数据库