下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

内核
最新资讯
简化任何设备的身份验证云连接。
利用 CoAP 设计节能型云连接 IoT 解决方案。
11.0.0 版 FreeRTOS 内核简介:
FreeRTOS 路线图和代码贡献流程。
使用 FreeRTOS 实现 OPC-UA over TSN。

创建一个新的 FreeRTOS 项目

简介

FreeRTOS 的设计初衷是简单且易于使用: 只需要三个 适用所有 RTOS 端口的源文件,和一个微控制器专用的源文件, 其 API 的设计 简单直观。

FreeRTOS 被移植到许多不同的微控制器架构,以及许多 不同的编译器。 每个官方端口都附有一个官方演示 (至少在创建时),无需任何修改即可在其硬件开发平台上 编译和执行。

提供演示项目是为了确保新用户可以在最短时间内上手使用 FreeRTOS, 最大限度地降低学习和探索成本。

FreeRTOS 支持的每个架构都用于许多不同的微控制器, 这意味着 FreeRTOS 可以在成千上万个各不相同的微控制器上 顺利工作。 将此数字乘以支持的编译器数量, 再乘以市面上与日俱增的开发板和开发入门套组, 虽然我们已经尽了最大努力,但很明显的是 我们提供的官方演示只能完全适用于很小一部分的 设备组合。

我们对于创建一个新的 FreeRTOS 项目的建议是, 从我们提供的预配置示例中选择一个, 然后再去适配。 这样做可以确保新项目包括所有必要的 源文件和头文件,并安装必要的中断服务 例程,为项目创建者节省精力。

一些 FreeRTOS 用户也想知道如何从头开始创建 FreeRTOS 项目 而不是在已有项目的基础上进行改编。 此操作的具体过程 详见下文。


FreeRTOS 项目剖析

一个 FreeRTOS 应用程序启动和执行的方式与一个非 RTOS 应用并无二致, 直到 vTaskStartScheduler() 被调用。 vTaskStartScheduler() 通常从应用程序的 main() 函数调用。 RTOS 仅控制 调用 vTaskStartScheduler() 后的执行顺序。

强烈建议务必确保代码在选择的目标上正确执行 (正确的启动代码、正确的链接器配置等), 然后再开始尝试使用 RTOS 功能。


源文件

FreeRTOS 的源文件为标准 C 源文件, 与项目中的其他 C 文件共同构建。 FreeRTOS 源文件 以 zip 文件形式分发。 RTOS 源代码组织页面 包含对 zip 文件中的文件结构的描述。

您的项目必须至少包含以下源文件:

  • FreeRTOS/Source/tasks.c
  • FreeRTOS/Source/queue.c
  • FreeRTOS/Source/list.c
  • FreeRTOS/Source/portable/[compiler]/[architecture]/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/[compiler]/[architecture].
  • 无论哪个目录包含要使用的 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 目录的子目录中。 请注意,一些演示项目的时间距离现在比较久,因此不包含所有可用的 配置选项。

应用程序编写者可以使用 FreeRTOSConfig.h 模板 作为起点为其应用程序创建 FreeRTOSConfig.h 文件 。


中断矢量

[Cortex-M 用户:有关安装中断处理器的信息 可参阅“我创建的应用程序进行编译,但不运行” 常见问题]

每个 RTOS 端口都使用计时器来实现周期性时钟中断。 许多端口 使用其他中断来管理上下文切换。 一个 RTOS 端口所需的中断由我们提供的 RTOS 端口源文件提供服务。

RTOS 端口所提供的中断处理程序的安装方法 取决于使用的端口和编译器。 请参阅我们提供的 官方示例应用以了解使用的端口,必要时复制即可。 另请参阅 官方演示应用配套的文档页面, 。





Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.