FreeRTOS 基础系列文章
基本对象
FreeRTOS——任务
FreeRTOS——队列
FreeRTOS——信号量
FreeRTOS——互斥量
FreeRTOS——任务通知
FreeRTOS——流和消息缓冲区
FreeRTOS——软件定时器
FreeRTOS——事件组
内存管理
FreeRTOS——静态与动态内存分配
FreeRTOS——堆内存管理
FreeRTOS——栈溢出保护
代码组织
FreeRTOS——源代码组织
FreeRTOS——创建新的项目
FreeRTOS——配置文件
FreeRTOS——源代码组织
每个 RTOS 端口都带有一个预配置的演示应用程序,该应用程序已经构建了必要的 RTOS 源文件,并包括了必要的 RTOS 头文件。强烈建议将提供的演示用作所有基于 FreeRTOS 的新应用程序的基础。提供此页面是为了帮助定位和理解所提供的项目。FreeRTOS 源代码可以从官网下载。
基本目录结构
FreeRTOS下载包括每个处理器端口和每个演示应用程序的源代码。将所有端口放在一次下载中大大简化了分发,但文件的数量似乎令人生畏。然而,目录结构非常简单,FreeRTOS 实时内核仅包含在 3 个文件中(如果需要软件计时器、事件组或协程功能,则需要其他文件)。
从顶部开始,下载分为两个子目录;FreeRTOS
和 FreeRTOS-Plus
。这些如下所示:
- FreeRTOS-Plus 包含
FreeRTOS+
组件和演示项目。
| - FreeRTOS 包含
FreeRTOS
实时内核源代码文件和演示项目
FreeRTOS-Plus
目录树包含多个描述其内容的 readme
文件。
FreeRTOS 内核目录结构
核心 FreeRTOS 内核源文件和演示项目包含在两个子目录中,如下所示:
- FreeRTOS
|- Demo 包含演示应用程序项目。
| - Source 包含实时内核源代码。
- Demo 包含演示应用程序项目。
核心 RTOS 代码包含在三个文件中,分别称为tasks.c
、queue.c
和list.c
。这三个文件位于FreeRTOS/Source
目录中。同一目录包含两个名为timers.c
和croutine.c
的可选文件,它们分别实现软件计时器和协程功能。
每个受支持的处理器架构都需要少量特定于架构的 RTOS 代码。这是 RTOS 可移植层,它位于FreeRTOS/Source/Portable/[compiler]/[architecture]
子目录中,其中[compiler]
和[architecture]
分别是用于创建端口的编译器,以及端口运行的架构。
由于Free RTOS——堆内存管理一文所述的原因,示例堆分配方案也位于可移植层。各种示例 heap_x.c
文件位于FreeRTOS/Source/portable/MemMang
目录中。
可移植层目录示例:
-
如果将 TriCore 1782 端口与 GCC 编译器一起使用:
TriCore
特定文件 (port.c
) 位于FreeRTOS/Source/Portable/GCC/TriCore_1782
目录中。除了FreeRTOS/Source/Portable/MemMang
之外的所有其他FreeRTOS/Source/Portable
子目录都可以忽略或删除。 -
如果将 Renesas RX600 端口与 IAR 编译器一起使用:
RX600
特定文件 (port.c
) 位于FreeRTOS/Source/Portable/IAR/RX600
目录下。除了FreeRTOS/Source/Portable/MemMang
之外的所有其他FreeRTOS/Source/Portable
子目录都可以忽略或删除。 -
所有其他的端口都是如此……
FreeRTOS/Source
目录的结构如下所示。
-
FreeRTOS
|
- Source 核心
FreeRTOS
内核文件
|- include 核心
FreeRTOS
内核头文件
| - Portable 特定于处理器的代码
|- Compiler x 编译器x支持的所有端口
- Compiler y 编译器y支持的所有端口
- MemMang 示例堆实现
- include 核心
- Source 核心
FreeRTOS 下载还包含每个处理器架构和编译器端口的演示应用程序。大多数演示应用程序代码对所有端口都是通用的,并包含在FreeRTOS/Demo/Common/Minimal
目录中(位于FreeRTOS/Demo/Common/Full
目录中的代码是遗留代码,仅供 PC 端口使用)。
其余的FreeRTOS/Demo
子目录包含用于构建单个演示应用程序的预配置项目。目录的命名表明了它们所使用的端口。
演示目录示例:
-
如果构建面向英飞凌 TriBoard 硬件的 TriCore GCC 演示应用程序:
TriCore 演示应用程序项目文件位于
FreeRTOS/Demo/TriCore_TC1782_TriBoard_GCC
目录中。FreeRTOS/Demo
目录中包含的所有其他子目录(Common
目录除外)都可以忽略或删除。 -
如果构建面向 RX62N RDK 硬件的 Renesas RX6000 IAR 演示应用程序:
IAR 工作区文件位于FreeRTOS/Demo/RX600_RX62N-RDK_IAR
目录中。FreeRTOS/Demo
目录中包含的所有其他子目录(Common
目录除外)都可以忽略或删除。 -
所有其他的端口都是如此……
FreeRTOS/Demo目录的结构如下所示。
- FreeRTOS
|- Demo
|- Common 所有演示都使用的演示应用程序文件。
- Dir x 演示应用程序为端口x构建文件
- Dir y 演示应用程序为端口y构建文件
- Demo
创建自己的应用程序
提供预先配置的演示应用程序是为了确保项目已经包含了正确的RTOS内核源文件,并设置了正确的编译器选项,从而以最少的用户工作量进行构建。因此,强烈建议通过修改现有的预配置演示应用程序来创建新的应用程序。要做到这一点,可以先构建一个现有的演示应用程序,以确保可以实现干净的构建(没有警告,没有错误),然后用您自己的应用程序源文件逐步替换FreeRTOS/demo目录中包含的文件。