下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

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

FreeRTOS V9

序言

其他变更有关更多详情,请参阅变更历史记录。 关于 FreeRTOS V9.0.0 的最终版本与之前候选版本之间差异的完整信息, 请参见变更历史记录——特别是 与新 xTaskCreateStatic() API 函数原型相关的信息。


FreeRTOS V9 亮点

向后兼容性

FreeRTOS V9.x.x 是 FreeRTOS V8.x.x 的直接兼容替代产品, 包含新的功能、增强功能和新的移植。


完全静态分配系统

引入了两个新的配置常量,允许 FreeRTOS 在无需任何动态内存分配的情况下 选择性地使用。 请参阅 configSUPPORT_STATIC_ALLOCATION configSUPPORT_DYNAMIC_ALLOCATION 常量描述的描述获取更多信息—— 特别是注意当 configSUPPORT_STATIC_ALLOCATION 设置为 1 时, 应用程序写入器需要提供两个回调函数。

位于 /FreeRTOS/demo/WIN32-MSVC-Static-Allocation-Only 目录下的 Win32 演示 是作为如何创建一个 完全不包括 FreeRTOS 堆的项目的参考, 因此保证不执行动态内存分配。


使用静态分配的 RAM 创建任务和其他 RTOS 对象

[另请参阅静态 Vs 动态 内存分配页面]

每个 [object]Create() RTOS 函数现在都有一个新的 [object]CreateStatic() 等效项。 更简单的 Create() 函数将使用动态内存分配, 而更强大的 CreateStatic() 函数将 使用应用程序写入器传递到该函数的内存。 这 允许使用静态分配或动态分配的内存来 创建任务、队列、信号量、软件定时器、互斥锁和事件组。 例如:

configSUPPORT_DYNAMIC_ALLOCATION 必须在 FreeRTOSConfig.h 中设置为 1 (或者不定义,因为它默认为 1),创建函数的“动态”版本 才可用。

configSUPPORT_STATIC_ALLOCATION 必须在 FreeRTOSConfig.h 中设置为 1, 创建函数的“静态”版本才可用——还需注意, 当 configSUPPORT_STATIC_ALLOCATION 设置为 1 时,要求应用程序写入器提供两个回调函数 。

StaticAllocation.c 标准演示任务是用于演示如何使用新的 CreateStatic() 函数。


强制 RTOS 任务离开阻塞状态

RTOS 任务进入阻塞状态, 以确保它们在等待时间推移或事件发生时不使用任何处理时间。 例如, 如果一个任务调用 vTaskDelay( 100 ), 它将进入“阻塞”状态,保持 100 的滴答的时间。 另一个例子是, 如果一个任务调用 xSemaphoreTake( xSemaphore, 50 ), 那么它将进入阻塞状态,直到信号量可用, 或者直到因为 50 个滴答过去了而信号量没有变得可用而超时。 [注意:在实际应用中,最好使用 pdMS_TO_TICKS() 宏 而不是滴答来指定以毫秒为单位的时间。]

新的 xTaskAbortDelay() RTOS API 函数可使一个任务 迫使另一个任务立即脱离阻塞状态。 这在以下情况下是可取的: 系统中其他地方发生的事件意味着阻塞状态的任务应该停止等待事件, 或者阻塞状态的任务有更紧急的事情要做 。

INCLUDE_xTaskAbortDelay 必须在 FreeRTOSConfig.h 中设置为 1, xTaskAbortDelay() 函数才可用。

AbortDelay.c 标准演示任务是用于演示如何使用 xTaskAbortDelay() 函数。


删除任务

在 V9 之前的 FreeRTOS 版本中,每当一个任务被删除, FreeRTOS 分配给该任务的内存就会被空闲任务释放。 在 FreeRTOS V9 中, 如果一个任务删除了另一个任务,则 FreeRTOS 分配给 被删除任务的内存会立即被释放。 但是,如果某个任务自己删除了自己, 空闲任务仍然会释放 FreeRTOS 分配给该任务的内存。 请注意,在任何情况下, 只有 RTOS 分配给任务的堆栈和任务控制块 (TCB) 才会被自动释放。


从任务名称中获取任务句柄

新的 xTaskGetHandle() API 函数 从任务的人类可读文本名称中获取任务句柄。

xTaskGetHandle() 使用多字符串比较操作, 所以建议每个任务只调用一次。 然后, xTaskGetHandle() 返回的句柄可存储在本地,以备日后重用。


其他变更

其他变更有关更多详情,请参阅变更历史记录
  • 允许 FreeRTOS 在 64 位架构上运行所需的更新。

  • 针对移植如何使用浮点单元方面增强了 GCC ARM Cortex-A 移植层 。

  • 更新配置了内存保护的 ARM Cortex-M RTOS 移植 ——使用 (MPU)。
  • 增加了 vApplicationDaemonTaskStartupHook(),当 RTOS 守护进程任务(以前称为定时器服务任务)开始运行时执行 。 如果应用程序包含会从调度器启动后执行中受益的初始化代码, 这将非常有用。

  • 新增了 pcQueueGetName() API 函数, 该函数从队列的句柄中获取队列名称。

  • 当 configUSE_PREEMPTION 为 0 时,也可以使用无滴答闲置(适用于低功耗应用) 。

  • 如果一个任务通知被用来从 ISR 中解锁一个任务, 但没有使用 xHigherPriorityTaskWoken 参数,那么就挂起一个上下文切换, 然后在下一个滴答中断期间发生。

  • Heap_1.c 和 Heap_2.c 现在使用之前仅由 heap_4.c 使用的 configAPPLICATION_ALLOCATED_HEAP 设置 。 configAPPLICATION_ALLOCATED_HEAP 允许应用程序写入器声明 将被用作 FreeRTOS 堆的数组, 并在这样做时将堆放在一个特定的内存位置。

  • 用于获取任务细节的 TaskStatus_t 结构体, 现在包括任务堆栈的基址。

  • 增加了 vTaskGetInfo() API 函数, 该函数会返回一个包含单个任务信息的 TaskStatus_t 结构体。 此前, 只能一次性获得所有任务的此类信息, 作为 TaskStatus_t 结构体的数组。

  • 新增了 uxSemaphoreGetCount() API 函数。

  • 在一些 Cortex-M3 移植层中复制以前的 Cortex-M4F 和 Cortex-M7 优化 。

  • 常规重构。

  • 支持多个附加设备。






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