FreeRTOS实时操作系统

什么是操作系统?
首先
一个计算机系统可以大致分为三个部分:硬件(Hardware),操作系统(operating system),应用程序(application programs)。
(1)硬件包含了芯片,存储空间,输入输出等设备为整个系统提供了基础的计算资源。
(2)操作系统是一个控制程序,作为硬件和应用程序之间的桥梁,主要是和硬件打交道,负责协调分配计算资源和内存资源给不同的应用程序使用,并防止系统出现故障。面对来自不同应用程序的大量且互相竞争的资源请求,操作系统通过一个调度算法和内存管理算法尽可能把资源公平且有效率地分配给不同的程序。
(3)应用程序则通过调用操作系统提供的API接口获得相应资源完成指定的任务。
操作系统从整体上分为两大类:通用操作系统和实时操作系统。

通用操作系统
通用操作系统包括Linux,Windows等主流的操作系统。这些操作系统大家都在使用,功能也十分强大,只是它们有时为了保障系统的流畅运行,就不能保证每个程序都能实时响应,在易用性和实时性之间有所取舍。而且单片机有限的片上资源也不足以支撑通用操作系统的运行。
实时操作系统
实时操作系统(RTOS-Real Time Operating System)中实时(Real Time)指的是任务(Task)或者说实现一个功能的线程(Thread)必须在给定的时间(Deadline)内完成。

人们总有种误解认为如果能堆砌更多的处理器核心数目,更高的处理器频率,更大的内存,更快的总线速度系统就一定能达到实时性。然而事与愿违强大的计算能力并不能保证系统的实时性。

为了保障这些实时任务能在给定的时间内完成,需要一个实时系统对这些任务进行调度和管理。一个实时操作系统能尽力保障每个任务的运行时间在规定时间内完成,这包括

(1)对中断和内部异常的处理

(2)对安全相关的事件的处理

(3)任务调度机制等

正所谓术业有专攻,在嵌入式领域中,嵌入式实时操作系统(RTOS)可以更合理、更有效地利用CPU的资源,简化应用软件的设计,缩短系统开发时间,从而更好地保证系统的实时性和可靠性。

目前比较流行的实时操作系统包括FreeRTOS,RT-Thread等

FreeRTOS简介
RTOS(实时操作系统)是指一类系统,如 FreeRTOS,RTX,RT-Thread 等,都是 RTOS 类操作系统。

FreeRTOS是所有实时操作系统中最受欢迎的一款.

FreeRTOS发展历史
FreeRTOS 由美国的 Richard Barry 于 2003 年发布。
FreeRTOS 于 2017 年被亚马逊收购,改名为 AWS FreeRTOS。

FreeRTOS优势

FreeRTOS 是市场领先的面向微控制器和小型微处理器的实时操作系统 (RTOS),与世界领先的芯片公司合作开发,现在每 170 秒下载一次。

FreeRTOS 通过 MIT 开源许可免费分发,包括一个内核和一组不断丰富的 IoT 库,适用于所有行业领域。FreeRTOS 的构建突出可靠性和易用性。

FreeRTOS是一款受欢迎、广泛应用于嵌入式系统的RTOS,其开源、轻量级、可移植的特点使其成为许多嵌入式开发者的首选,主要优势如下:

开源和免费:FreeRTOS是一款开源的RTOS,采用MIT许可证发布,可以免费使用、修改和分发。

轻量级设计:FreeRTOS注重轻量级设计,适用于资源受限的嵌入式系统,不占用过多内存和处理器资源。

广泛应用:FreeRTOS在嵌入式领域得到广泛应用,包括工业自动化、医疗设备、消费电子产品、汽车电子等。

多平台支持:FreeRTOS的设计注重可移植性,可以轻松地移植到不同的硬件平台,支持多种处理器架构。

丰富的功能:提供了多任务调度、任务通信、同步等功能,适用于复杂的嵌入式应用场景。

FreeRTOS特点
官网:https://freertos.org/ ,并且支持中文。

任务调度:FreeRTOS通过任务调度器管理多个任务,支持不同优先级的任务,实现任务的有序执行。

任务通信和同步:提供了队列、信号量等机制,支持任务之间的通信和同步,确保数据的安全传递。

内存管理:提供简单的内存管理机制,适用于嵌入式环境,有效利用有限的内存资源。

定时器和中断处理:支持定时器功能,能够处理中断,提供了可靠的实时性能。

开发社区:拥有庞大的用户社区,开发者可以在社区中获取支持、解决问题,并分享经验。

可移植性:设计注重可移植性,可以轻松地移植到不同的硬件平台,提高了代码的重用性。

FreeRTOS基础理论
多任务处理
内核是操作系统的核心组件。诸如 Linux 这样的操作系统采用的内核, 看似允许用户同时访问计算机。很明显,多个用户可以同时执行多个程序 。

每个执行程序都是受操作系统控制的任务(或线程)。如果一个操作系统能够以这种方式执行多个任务, 则可称其为多任务操作系统。

使用多任务操作系统可以简化原本复杂的软件应用程序的设计 :

(1)操作系统的多任务处理和任务间通信功能允许将复杂的应用程序分割成一组更小、更易于管理的任务。

(2)通过分割,您可以更轻松地执行软件测试、分解团队内部工作以及复用代码。

(3)复杂的时序和排序细节可以从应用程序代码中移除,由操作系统负责。

即使单核处理器一次只能执行一项任务。 多任务操作系统可以通过任务之间的快速切换制造并发执行的假象。下图展示了与时间相关的三项任务的执行模式。 任务名称采用颜色编码,并写在左手边。 时间从左向右移动, 彩色线条显示了在任何特定时间正在执行的任务。 上方展示了所感知的并发执行模式, 下方展示了实际的多任务执行模式。
image

任务调度
一个处理器核心在某一时刻只能运行一个任务,如在各个任务之间迅速切换,这样看起来就像多个任务在同时运行。操作系统中任务调度器的责任就是决定在某一时刻要执行哪个任务。

调度器是内核中负责决定在任何特定时间应执行哪些任务的部分。内核可以在任务生命周期内多次挂起并且稍后恢复一个任务。

调度策略是调度器用来决定在任何时间点执行哪个任务的算法。

FreeRTOS 默认使用固定优先级的抢占式调度策略,对同等优先级的任务执行时间片轮询调度:

抢占式调度:FreeRTOS采用抢占式调度方式,允许更高优先级的任务在任何时刻抢占正在执行的低优先级任务。这确保了高优先级任务能够及时响应,并提高了系统的实时性。

时间片轮询:在相同优先级的任务之间,FreeRTOS采用时间片轮转策略。每个任务执行一个时间片,如果有其他同优先级的任务等待执行,则切换到下一个任务。这有助于公平地分配CPU时间。

但是并不是说高优先级的任务会一直执行,导致低优先级的任务无法得到执行。如果高优先级任务等待某个资源(延时或等待信号量等)而无法执行,调度器会选择执行其他就绪的高优先级的任务。
image

image

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

运行态:当任务实际执行时,它被称为处于运行状态。如果运行 RTOS 的处理器只有一个内核, 那么在任何给定时间内都只能有一个任务处于运行状态。注意在STM32中,同一时间仅一个任务处于运行态。

就绪态:准备就绪任务指那些能够执行(它们不处于阻塞或挂起状态), 但目前没有执行的任务, 因为同等或更高优先级的不同任务已经处于运行状态。

阻塞态:如果任务当前正在等待延时或外部事件,则该任务被认为处于阻塞状态。

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

只有就绪态可转变成运行态,其他状态的任务想运行,必须先转变成就绪态。转换关系如下:
image

posted @ 2025-06-21 16:37  Liu余庆  阅读(149)  评论(0)    收藏  举报