FreeRTOS实战指南 — 1 FreeRTOS简介
FreeRTOS源码中包含3个主要的文件夹,FreeRTOS文件夹包含了FreeRTOS内核的源代码和相关的头文件,这是FreeRTOS实时操作系统的核心部分,包括任务管理、时间管理、同步机制等功能的实现。FreeRTOS提供了丰富的任务管理、时间管理、同步和通信机制,同时保持了代码的简洁性和可维护性。FreeRTOS 包含 Demo 例程和内核源码,FreeRTOS 文件夹下的 Source 文
目录
1.1 为什么需要FreeRTOS
裸机开发直接控制硬件,虽然资源占用少,但开发复杂性高,缺乏高级功能,适合资源受限的简单应用。嵌入式操作系统提供了硬件抽象层、多任务处理、丰富的API和驱动支持,使得开发更加高效、可扩展和可维护,但需要更多的系统资源。
FreeRTOS是众多嵌入式操作系统中的一种,常用的还有uC/OS-II、RT-Thread、Linux等。uC/OS-II以其简洁高效的实时内核著称;FreeRTOS则提供了小型且高度可配置的实时多任务解决方案;RT-Thread在保持实时性的同时,融入了丰富的物联网特性与软件包支持;而Linux作为通用操作系统,以其强大的功能和广泛的硬件支持,也在嵌入式领域占据重要位置。以下是几种操作系统的对比。
|
特性/系统 |
uC/OS-II |
FreeRTOS |
RT-Thread |
Linux |
|
开发者 |
Micrium公司 |
Richard Barry |
中国开源社区 |
林纳斯·托瓦兹(Linus Torvalds) |
|
开源性 |
通常是商业许可,但存在开源版本 |
开源 |
开源 |
开源 |
|
设计理念 |
简洁、可裁剪的实时内核 |
小型、轻量级、高效 |
丰富的软件包和易于移植 |
通用性、多任务、网络支持 |
|
实时性 |
高 |
高 |
高 |
可通过特定配置实现实时性 |
|
可移植性 |
高 |
高 |
高 |
高,支持多种硬件平台 |
|
内存占用 |
低 |
极低 |
较低,但较FreeRTOS高 |
相对较高 |
|
多任务支持 |
支持 |
支持 |
支持 |
支持 |
|
任务调度 |
基于优先级 |
基于优先级,支持时间片轮转 |
基于优先级,支持多种调度策略 |
多种调度算法 |
|
设备驱动支持 |
有限,需自行开发或购买 |
有限,需自行开发 |
提供统一设备驱动框架,支持多种外设 |
丰富的设备驱动,涵盖广泛硬件 |
|
生态系统与社区 |
相对较小,但专业性强 |
活跃的开源社区 |
活跃的开源社区,但较Linux小 |
庞大的开源社区,丰富的资源 |
|
应用场景 |
工业控制、医疗设备 |
传感器控制、家电控制 |
智能家居、工业自动化、物联网 |
广泛,包括服务器、桌面、嵌入式等 |
FreeRTOS是一个轻量级的实时操作系统,广泛用于微控制器和小型微处理器。它以其高效的资源利用、可预测的实时性能和易于移植的特性,成为嵌入式系统开发者的首选之一。FreeRTOS提供了丰富的任务管理、时间管理、同步和通信机制,同时保持了代码的简洁性和可维护性。作为一个开源项目,FreeRTOS拥有活跃的社区支持,并且由Amazon提供长期维护和更新,是物联网和各种嵌入式应用中常用的操作系统。
1.2 FreeRTOS资料获取
FreeRTOS的源码和相应的官方书籍均可从官网www.freertos.org获得,官网首页打开后具体见图。

点击DownloadSource按钮,可以下载FreeRTOS最新版本的源码。如果想下载以往版本的可从托管网址:https://sourceforge.net/projects/freertos/files/FreeRTOS/下载。教程通过托管网址下载FreeRTOS最新版本。

有 zip 和 exe 格式两种不同的的压缩包可供选择,只是压缩的格式不一样,选择其中任意一个下载。

1.3 FreeRTOS文件夹内容
FreeRTOS源码中包含3个主要的文件夹,FreeRTOS文件夹包含了FreeRTOS内核的源代码和相关的头文件,这是FreeRTOS实时操作系统的核心部分,包括任务管理、时间管理、同步机制等功能的实现。FreeRTOS-Plus文件夹是FreeRTOS的扩展组件,提供了额外的功能,如TCP/IP网络堆栈、文件系统、安全协议等。tools文件夹包含了一些与FreeRTOS相关的工具,用于辅助开发、调试或测试FreeRTOS应用程序。这里我们主要学习的是第1个FreeRTOS文件夹。

FreeRTOS 包含 Demo 例程和内核源码,FreeRTOS 文件夹下的 Source 文件夹里面包含的是 FreeRTOS 内核的源代码,我们移植 FreeRTOS 的时候就需要这部分源代码; FreeRTOS 文件夹下的Demo 文件夹里面包含了 FreeRTOS 官方为各个单片机移植好的工程代码,下面我们对 FreeRTOS 的文件夹进行分析说明。
|
一级目录 |
二级目录 |
描述 |
|
Demo |
Common |
包含多个示例项目共享的源代码和配置文件。 |
|
[Platform] |
包含特定平台的示例项目,如 CORTEX_M4F、CORTEX_M7 等。进行项目开发时,可以方便的以此搭建出自己的项目 |
|
|
Source |
include |
包含 FreeRTOS 内核的头文件。 |
|
portable |
包含与硬件架构相关的移植代码。 |
|
|
portable/MemMang |
包含不同的内存管理实现,例如 heap_1, heap_2, heap_3, heap_4, heap_5。 |
|
|
portable/Compiler |
包含特定编译器的移植文件,如 GCC、IAR、Keil 等。 |
|
|
portable/Arch |
包含特定架构的移植文件,如 ARM、MIPS、Xilinx 等。 |
|
|
Documentation |
包含 FreeRTOS 的官方文档,包括快速入门指南、API 参考等。 |
|
|
License |
包含 FreeRTOS 的许可证文件。 |
这里我们重点分析一下FreeRTOS/ Source 文件夹下的文件,include文件夹包含FreeRTOS内核的所有公共头文件,这些头文件定义了FreeRTOS API、数据结构和宏。portable文件夹包含与特定硬件架构或编译器相关的代码,这些代码负责将FreeRTOS内核与目标硬件平台或编译器接口连接起来。其余部分则是一些通用的C文件。

Include文件夹具体描述如下表格。
|
文件/文件夹名称 |
描述 |
|
atomic.h |
原子操作相关的API,用于无序访问的数据操作。 |
|
croutine.h |
协程相关API,用于协程的创建和管理。 |
|
deprecated_definitions.h |
已弃用的宏定义,用于向后兼容。 |
|
event_groups.h |
事件组API,用于任务间的同步和通信。 |
|
FreeRTOS.h |
FreeRTOS核心API,包含所有其他头文件。 |
|
list.h |
列表操作相关的数据结构和宏。 |
|
message_buffer.h |
消息缓冲区API,用于发送和接收消息。 |
|
mpu_prototypes.h |
内存保护单元(MPU)相关原型声明。 |
|
mpu_wrappers.h |
MPU安全访问封装函数。 |
|
portable.h |
移植层相关的数据类型和宏定义。 |
|
projdefs.h |
项目定义的宏,如任务挂起和恢复。 |
|
queue.h |
队列API,用于任务间的数据传递。 |
|
semphr.h |
信号量API,用于任务同步。 |
|
stack_macros.h |
栈相关宏定义,用于任务栈操作。 |
|
StackMacros.h |
栈相关宏定义,用于任务栈操作。 |
|
stdint.readme |
关于标准整数类型定义的说明。 |
|
stream_buffer.h |
流缓冲区API,用于数据流的传输。 |
|
task.h |
任务创建和管理相关的API。 |
|
timers.h |
软件定时器API,用于任务定时操作。 |
portable文件夹在FreeRTOS中包含了使FreeRTOS能够与特定硬件架构和编译器接口兼容的代码,如任务上下文切换、内存管理和中断管理,同时提供了多种内存分配策略,确保了FreeRTOS内核的可移植性和高效运行。

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)