您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center 汽车系统工程   模型库  
会员   
   
基于UML和EA进行分析设计
2月3-4日 北京+线上
需求分析与管理
2月9-10日 北京+线上
AI大模型编写高质量代码
3月12-13日 北京+线上
     
   
 订阅
【FreeRTOS】裸机/RTOS开发&FreeRTOS&任务调度/任务状态&源码与移植
 
作者:二象性Libo
 
  366   次浏览      6 次
 2026-01-23
 
编辑推荐:
本文主要介绍了FreeRTOS裸机、RTOS开发与任务调度、任务状态、源码与移植相关内容, 希望对您的学习有所帮助。
本文来自于微信公众号二象性Libo,由火龙果软件Linda编辑、推荐。

FreeRTOS 是市场领先的面向微控制器和小型微处理器的实时操作系统 (RTOS),与世界领先的芯片公司合作开发,现在每 170 秒下载一次。FreeRTOS 通过 MIT 开源许可免费分发,包括一个内核和一组不断丰富的 IoT 库,适用于所有行业领域。FreeRTOS 的构建强调可靠性和易用性。

一、裸机与RTOS

1、裸机

简介:裸机又称为前后台系统,前台系统指的中断服务函数,后台系统指的大循环,即应用程序。

例子:打游戏和回复信息,需要打完游戏才可回复信息,或者回复完信息才可打游戏。

特点:①实时性差:应用程序轮流执行。②delay:空等待,CPU不执行其他代码(浪费了资源)。③结构臃肿:实现的功能都放在无限循环。

2、RTOS

简介:RTOS全称为:Real Time OS,就是实时操作系统,强调的是:实时性。

例子:打游戏和回复信息,不需要等某一件事做完,可每间隔1ms(一个时间片时钟节拍),然后交替做这两件事,因为速度很快,从宏观的意义上来看,类似同步执行!

特点:①分而治之:实现功能划分多个任务。②延时函数:不会空等待,会让CPU的使用权给其他任务,即任务调度。③抢占式:高优先级任务抢占低优先级任务。④任务堆栈:每个任务都有自己的栈空间,用于保存局部变量以及任务的上下文信息。

注意:①中断可以打断任何任务。②任务可以同等优先级。

问题:如果高优先级的任务一直在运行,会使得低优先级任务无法运行。

二、FreeRTOS

简介:FreeRTOS 是一个嵌入式实时操作系统。

特点:①免费开源:商业产品中使用,无潜在商业风险,无须担心。②可裁剪:使得FreeRTOS的核心代码只有9000行左右。③简单:简单易用,可移植性好。④优先级不限:任务优先级分配没有限制,多任务可同一优先级。⑤任务不限:可创建的实时任务数量没有软件限制。⑥支持抢占式,协程式、时间片流转任务调度。

1、任务调度

调度器就是使用相关的调度算法来决定当前需要执行的任务。FreeRTOS支持抢占式、时间片、携程式三种调度方式。

①抢占式调度:针对优先级不同的任务,每个任务都有一个优先级,优先级高的任务可以抢占优先级低的任务。

首先Task1在运行中,在这个过程中Task2就绪了,在抢占式调度器的作用下Task2会抢占Task1的运行;Task2运行过程中,Task3就绪了,在抢占式调度器的作用下Task3会抢占Task2的运行;Task3运行过程中,如果Task3阻塞了(即系统延时或等待信号量等),此时就绪态中优先级最高的任务Task2执行;如果Task3阻塞解除了(延时到了或者接收到信号量),此时Task3恢复到就绪态中,抢占TasK2的运行。

总结:①高优先级任务,优先执行。②高优先级任务不停止,低优先级任务无法执行。③被抢占的任务将会进入就绪态。

②时间片调度:针对优先级相同的任务,当多个任务的优先级相同时, 任务调度器会在每一次系统时钟节拍到的时候切换任务。同等优先级任务轮流地享有相同的 CPU 时间(可设置), 叫时间片,在FreeRTOS中,一个时间片就等于SysTick 中断周期。

首先Task1运行完一个时间片后,切换至Task2运行;Task2运行完一个时间片后,切换至Task3运行;Task3运行过程中还不到一个时间片阻塞了(系统延时或等待信号量等),此时直接切换到下一个任务Task1;Task1运行完一个时间片后,切换至Task2运行。

总结:①同等优先级任务,轮流执行;时间片流转。②一个时间片大小,取决为滴答定时器中断周期。③注意没有用完的时间片不会再使用,下次任务Task3得到执行还是按照一个时间片的时钟节拍运行(下次重新开始一个时间片计时)。

③协程式调度:了解即可,当前执行任务将会一直运行,同时高优先级的任务不会抢占低优先级任务。官方已不会再更新此种方式的任务调度。

2、任务状态(4种)

①运行态:正在执行的任务,该任务就处于运行态,注意在STM32中,同一时间仅一个任务处于运行态。

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

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

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

总结:仅就绪态可转变为运行态;其他状态的任务想运行,必须先转变成就绪态。

任务状态列表:

这四种状态中,除了运行态,其他三种任务状态的任务都有其对应的任务状态列表(类似链表)

新创建的任务会在就绪列表。32位的变量,当某个位置1时,代表所对应的优先级就绪列表有任务存在。

举例:假设,创建三个任务分别是:task1、task2、task3,优先级分别是:1、2、3。调度器总是在所有处于就绪列表的任务中,选择具有最高优先级的任务来执行。若出现相同优先级任务,任务会连接在同一个就绪列表上。

有关任务状态列表的知识后续会有专门的博客总结!

三、FreeRTOS源码说明&移植

1、源码

源码下载链接:https://www.freertos.org/

这三个文件依次是内核、组件和工具,其中第一个FreeRTOS内核包括Demo(FreeRTOS演示例程)、License(FreeRTOS相关许可)、Source(源码)、Test(公用以及移植层测试代码)。

源码Source里需要注意include(头文件)、portable(移植文件)、list.c(列表相关文件)、queue.c(队列相关文件)、task.c(任务相关文件)、timers.c(软件定时器相关文件)。

FreeRTOS操作系统归根到底是一个软件层面的东西,靠portable(移植文件)与硬件联系起来,我们使用MDK开发,因此这里只重点介绍其中的部分移植文件:

2、 移植(基于HAL库开发,基于库函数的稍有不同)

①添加FreeRTOS源码:将FreeRTOS源码添加至基础工程、头文件路径等

②FreeRTOSConfig.h:添加FreeRTOSConfig.h 配置文件。

③修改SYSTEM文件:修改SYSTEM文件中的sys.c、delay.c、usart.c。

④修改中断相关文件:修改Systick中断、SVC中断、PendSV中断。

⑤添加应用程序:验证移植是否成功。

FreeRTOSConfig.h 配置文件作用:对FreeRTOS的功能进行配置和裁剪,以及API函数的使能等

相关宏大致可分为三类: “INCLUDE”用于配置FreeRTOS中可选的API函数;“config”完成FreeRTOS的功能配置和裁剪;其他配置项PendSV宏定义、SVC宏定义等。

   
366   次浏览       6 次
 
相关文章

CMM之后对CMMI的思考
对软件研发项目管理的深入探讨
软件过程改进
软件过程改进的实现
 
相关文档

软件过程改进框架
软件过程改进的CMM-TSP-PSP模型
过程塑造(小型软件团队过程改进)
软件过程改进:经验和教训
 
相关课程

以"我"为中心的过程改进(iProcess )
iProcess过程改进实践
CMMI体系与实践
基于CMMI标准的软件质量保证

最新活动计划
AI大模型编写高质量代码 2-9[在线]
基于UML+EA进行分析设计 2-3[北京]
需求分析与管理 2-9[北京]
基于模型的数据治理 3-10[北京]
UAF与企业架构 2-3[北京]
ASPICE4.0核心开发过程 3-21[上海]
嵌入式软件测试 3-27[上海]
 
 
最新文章
iPerson的过程观:要 过程 or 结果
基于模型的需求管理方法与工具
敏捷产品管理之 Story
敏捷开发需求管理(产品backlog)
Kanban看板管理实践精要
最新课程
基于iProcess的敏捷过程
软件开发过程中的项目管理
持续集成与敏捷开发
敏捷过程实践
敏捷测试-简单而可行
更多...   
成功案例
英特尔 SCRUM-敏捷开发实战
某著名汽车 敏捷开发过程与管理实践
北京 敏捷开发过程与项目管理
东方证券 基于看板的敏捷方法实践
亚信 工作量估算
更多...