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

FreeRTOS

FreeRTOS任务调度的三种方式:

抢占式调度

针对优先级不同的任务

时间片调度
  • 针对优先级相同的任务;

  • FreeRTOS中的一个时间片就等于SysTick(滴答定时器)中断周期(1ms);

协程式调度

后续将不再支持。

[!NOTE]

  1. 同等优先级任务,轮流执行;时间片流转;
  2. 一个时间片大小,取决于滴答定时器中断周期;
  3. 没有用完的时间片将不会再使用,会直接进入下个任务;下次执行该任务时还是按照一个时间片的时钟节拍运行;
四种任务状态
  1. 运行态:只能从就绪态进入该状态;
  2. 就绪态
  3. 阻塞态
  4. 挂起态:类似暂停,调用函数vTaskSuspend()进入挂起状态,需要调用解挂函数vTaskResume()才可以进入就绪状态;

[!NOTE]

  1. 仅就绪态可转变为运行态;
  2. 其他状态的任务想运行,就必须先转变为就绪态;
  3. FreeRTOS的四中状态中,除了运行态,其他三种任务状态的任务都有其对应的任务状态列表(链表);
任务状态列表
  1. 就绪列表:pxReadyTaskLists[x],其中x代表任务优先级数值;只有任务先挂载到就绪列表,任务才能进入到运行态;
  2. 阻塞列表:pxDelayedTaskList
  3. 挂起列表:xSuspendTaskList

FreeRTOS 移植

源码获取
  • 官网
  • 第三方开发板厂商
源码
  • include:FreeRTOS的头文件
  • portable:FreeRTOS的移植文件
  • croutine.c:协程相关文件按
  • event_groups.c:事件相关文件
  • list.c:列表相关文件
  • queue.c:队列相关文件
  • stream_buffer.c:流式缓冲区相关文件
  • task.c:任务相关文件
  • timers.c:软件定时器相关文件
portable文件夹

FreeRTOS操作系统归根到底是一个软件层面的东西,那FreeRTOS是如何跟硬件联系在一起的呢?portable文件里面的东西就是连接桥梁。

由于使用MDK开发(stm32),因此这里重点介绍其中的部分移植文件:

  • Keil:指向RVDS文件夹
  • RVDS:不同内核芯片的移植文件
  • MemMang:内存管理文件
移植
  • 移植准备:FreeRTOS源码

  • 基础工程:

  • 移植步骤:

  1. 添加FreeRTOS源码:将FreeRTOS源码添加至基础工程、头文件路径等;
  2. FreeRTOSConfig.h:添加FreeRTOSConfig.h配置文件;
  3. 修改SYSTEM文件:修改SYSTEM文件中的sys.cdelay.cusart.c
  4. 修改中断相关文件:修改Systick中断、SVC中断、PendSV中断;
  5. 添加应用程序:验证移植是否成功;

相关文章:

  • FerretDB:基于PostgreSQL的MongoDB替代产品
  • 【QQMusic项目界面开发复习笔记】第二章
  • 【电路笔记】-多绕组变压器
  • 59、微服务保姆教程(二)Nacos--- 微服务 注册中心 + 配置中心
  • OS库的常用操作
  • 分布式定时任务(xxl-job)
  • FreeRTOS学习笔记【10】-----任务上下文切换
  • 学生管理系统微服务方式实现
  • SQLAlchemy 2.x 异步查询方法比较
  • Rust 学习笔记:函数和控制流
  • tcp 和http 网络知识
  • 详解 Servlet 处理表单数据
  • 向量数据库实践:存储和检索向量数据
  • synchronization
  • 国产升压芯片SL4013能否支持输入三节锂电11V-12.6V升压至24V应用参数?
  • [特殊字符] Docker 从入门到实战:全流程教程 + 项目部署指南(含镜像加速)
  • uniapp-商城-38-shop 购物车 选好了 进行订单确认4 配送方式1
  • C++23 新特性深度落地与最佳实践
  • 79. 单词搜索
  • 图论---染色法(判断是否为二分图)
  • 11-13世纪的地中海贸易
  • 过敏性鼻炎,不只是“打喷嚏”那么简单
  • 韩国检方起诉前总统文在寅
  • 习近平在气候和公正转型领导人峰会上的致辞(全文)
  • 什么是中国好手艺?材美、工巧、器韵、时宜
  • 林毅夫:中美经济确有脱钩风险,但“完全脱钩”可能性不大