FreeRTOS 基础系列文章
基本对象
FreeRTOS——任务
FreeRTOS——队列
FreeRTOS——信号量
FreeRTOS——互斥量
FreeRTOS——任务通知
FreeRTOS——流和消息缓冲区
FreeRTOS——软件定时器
FreeRTOS——事件组
内存管理
FreeRTOS——静态与动态内存分配
FreeRTOS——堆内存管理
FreeRTOS——栈溢出保护
代码组织
FreeRTOS——源代码组织
FreeRTOS——创建新的项目
FreeRTOS——配置文件
概要
FreeRTOS 旨在简单易用:只需要 3 个所有 RTOS 端口通用的源文件和一个特定于微控制器的源文件,其 API 设计简单直观。
FreeRTOS 被移植到许多不同的微控制器架构和许多不同的编译器。每个官方移植都有一个官方演示,无需任何修改即可在其开发的硬件平台上编译和执行。
提供演示项目是为了确保新用户可以在尽可能短的时间内开始使用 FreeRTOS,并且不会手忙脚乱。
始终建议通过从提供的预配置演示之一开始,然后调整
来创建新的 FreeRTOS 项目 。这样做可确保新项目包含所有必要的源文件和头文件,并安装必要的中断服务程序,项目创建者无需付出任何努力。
一些 FreeRTOS 用户还想知道如何通过改编现有项目以外的方式来创建 FreeRTOS 项目。执行此操作的过程记录如下。
FreeRTOS 项目剖析
在调用 vTaskStartScheduler()
之前,FreeRTOS 应用程序将像非 RTOS 应用程序一样启动和执行。vTaskStartScheduler() 通常从应用程序的 main()
函数中调用。RTOS 仅在调用 vTaskStartScheduler() 后控制执行顺序。
强烈建议在尝试使用任何 RTOS 功能之前,确保所选目标上的代码正在正确执行(正确的启动代码,正确的链接器配置,等等)。
源文件
FreeRTOS 是作为标准的 C 源文件提供的,与项目中的所有其他 C 文件一起构建。FreeRTOS 源文件以 zip 文件的形式分发。FreeRTOS——源代码组织一文描述了 zip 文件中的文件结构。
至少,以下源文件必须包含在您的项目中:
- FreeRTOS/Source/
tasks.c
- FreeRTOS/Source/
queue.c
- FreeRTOS/Source/
list.c
- FreeRTOS/Source/portable/[编译器]/[架构]/
port.c
- FreeRTOS/Source/portable/MemMang/
heap_x.c
其中 ‘x’ 为 1, 2, 3, 4 或 5
如果包含 port.c 文件的目录还包含汇编语言文件,则也必须使用汇编语言文件。
可选源文件
如果您需要软件计时器功能,请将 FreeRTOS/Source/timers.c
添加到您的项目中。
如果您需要事件组功能,请将 FreeRTOS/Source/event_groups.c
添加到您的项目中。
如果您需要流缓冲区或消息缓冲区功能,请将 FreeRTOS/Source/stream_buffer.c
添加到您的项目中。
如果您需要协程功能,请将 FreeRTOS/Source/croutine.c
添加到您的项目中(注意协程已被弃用,不推荐用于新设计)。
头文件
以下目录必须在编译器的包含路径中(必须告诉编译器在这些目录中搜索头文件):
FreeRTOS/Source/include
FreeRTOS/Source/portable/[编译器]/[架构]
- 包含要使用的
FreeRTOSConfig.h
文件的目录 —— 请参阅下面的配置文件段落。
根据端口的不同,可能还需要将相同的目录放在汇编器的包含路径中。
配置文件
每个项目还需要一个名为 FreeRTOSConfig.h
的文件。FreeRTOSConfig.h 根据正在构建的应用程序定制 RTOS 内核。因此,它特定于应用程序,而不是 RTOS,并且应该位于应用程序目录中,而不是位于 RTOS 内核源代码目录之一中。
如果您的项目中包含 heap_1、heap_2、heap_4 或 heap_5,则 FreeRTOSConfig.h 定义的 configTOTAL_HEAP_SIZE
将标注 FreeRTOS 堆的尺寸。如果 configTOTAL_HEAP_SIZE 设置得太高,您的应用程序将无法链接。
FreeRTOSConfig.h 定义 configMINIMAL_STACK_SIZE
设置空闲任务使用的栈大小。如果 configMINIMAL_STACK_SIZE 设置得太低,那么空闲任务将产生栈溢出。建议从为相同微控制器架构提供的官方 FreeRTOS 演示中复制 configMINIMAL_STACK_SIZE 设置。FreeRTOS 演示项目存储在 FreeRTOS/Demo
目录的子目录中。请注意,一些演示项目是旧的,因此不包含所有可用的配置选项。
中断向量
每个 RTOS 端口都使用一个定时器来产生一个周期性的滴答中断。许多端口使用额外的中断来管理上下文切换。RTOS 端口所需的中断由提供的 RTOS 端口源文件提供服务。
用于安装 RTOS 端口提供的中断处理程序的方法取决于所使用的端口和编译器。请参阅并在必要时复制所使用的端口的官方演示应用程序。