下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

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

适用于 NXP LPCXpresso55S69 开发板的 ARM Cortex-M33 (ARMv8-M) 演示
使用 MCUXpresso IDE
[RTOS 移植]



本页记录了经预配置的 FreeRTOS 项目,适用于 ARM Cortex-M33 核心。 此核心位于 NXP LPCXpresso55S69 开发板上。 该项目使用 MCUXpresso IDE 和 GCC 编译器来构建 FreeRTOS ARMv8-M GCC 移植。该项目展示了 使用 ARM Cortex-M33 TrustZone 和 ARM Cortex-M33 内存保护单元 (MPU)。



重要提示!FreeRTOS ARM Cortex-M33 移植使用说明

使用此 RTOS 移植之前,请阅读以下所有要点。

  1. 源代码组织
  2. 演示应用程序
  3. 构建和运行 RTOS 演示应用程序
  4. RTOS配置和使用详情
另请参阅常见问题中的“我的应用程序没有运行,可能出了什么问题?” 描述在 在 ARMv8-M 核心上运行 FreeRTOS 的页面,以及描述设置 ARM Cortex-M 中断优先级用于 FreeRTOS 的页面。



源代码组织

FreeRTOS zip 文件下载内容中包含所有 FreeRTOS 移植的源代码及 所有演示应用程序。 这意味着它包含的文件数量比使用 FreeRTOS ARMv8-M Cortex-M33 移植所需的数量。请参阅 源代码组织页面,了解有关 zip 文件目录结构的信息。

此演示的项目文件位于 FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/Projects/MCUXpresso 目录下. ARM Cortex-M33 核心安全端的项目文件 采用常见的 Eclipse 项目名称 .project,位于 FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/Projects/MCUXpresso/Secure 目录下。ARM Cortex-M33核心非安全端的项目文件 采用常见的 Eclipse项目名称 .project,位于 FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/Projects/MCUXpresso/NonSecure 目录下。这两个项目中编译的 FreeRTOS ARMv8-M Cortex-M33 移植文件的 组织结构如下:

  • 在安全项目中编译的移植文件位于 FreeRTOS/Source/portable/GCC/ARM_CM33/secure 目录下。
  • 在非安全项目中编译的移植文件位于 FreeRTOS/Source/portable/GCC/ARM_CM33/non_secure 目录下。



演示应用程序

该项目包括两个演示:
  1. TrustZone 演示
  2. 内存保护单元 (MPU) 演示

TrustZone 演示

TrustZone 演示展示了如何从 ARM Cortex-M33 核心的安全端导出函数,以及如何从非安全端的 RTOS 任务中调用它们 。
  • 非安全可调用函数:

    以下函数从安全端导出并标记 为非安全可调用:

    secureportNON_SECURE_CALLABLE uint32_t NSCFunction( Callback_t pxCallback )

    注意使用 secureportNON_SECURE_callable 宏将函数标记为 非安全可调用。此函数接受回调 作为实参。它首先调用作为实参提供的回调函数 然后递增安全端计数器。安全端计数器的增量 返回给调用者。

  • 非安全回调:

    以下函数在非安全端实现,并且 作为上述非安全可调用函数的实参:

    void prvCallback( void )

    此函数递增非安全计数器。

  • 安全调用任务:

    使用 API 创建了非特权非安全 xTaskCreateRestricted() 任务。此任务首先调用 portALOCATE_SECURE_CONTEXT 来自行分配 一个安全的上下文——任何任务想要调用 从安全端导出的函数,必须 通过调用 portALLOCATE_SECURE_CONTEXT 为自己分配一个安全端。

    然后任务调用安全端函数并传递非安全 回调作为实参。非安全计数器在回调中递增 并且安全计数器在安全函数中递增。因此, 完成调用安全函数后,两个计数器都必须递增 ——使用 configASSERT() 确保这一点。任务 睡眠一秒钟,然后重复同样的动作。

TrustZone 演示调用序列
TrustZone 演示调用序列

内存保护单元 (MPU) 演示

MPU 演示展示了如何使用 MPU 授予各个内存区域的任务特定访问许可。MPU 演示包含以下两个任务:
  • RW 任务:

    RW 任务拥有对内存共享区域 (即 ucSharedMemory)的读写访问权限。

  • RO 任务:

    RO 任务拥有对相同内存共享区域 (即 ucSharedMemory)的只读访问权限。此任务会尝试写入共享内存, 且由于它拥有对共享内存的只读权限, 因此会导致内存故障。故障处理程序可检查故障是否为来自 RO 任务的预期故障,如果是,它可以通过 递增程序计数器的值到下一条语句来完成恢复。



构建并运行 RTOS 演示应用程序

  1. 启动 the MCUXpresso IDE。请注意,您需要 MCUXpresso IDE 版本 10.3.1 或更高版本 ,才能构建和运行此演示。

  2. 选择工作区目录,然后点击 "Launch"。

    MCUXpresso IDE - 启动器
    MCUXpresso IDE - 启动器。点击放大。


  3. 单击 "File --> Import...",打开导入项目对话框。

    MCUXpresso IDE - 导入
    MCUXpresso IDE - 导入。 点击放大。


  4. 选择 "General --> Existing Projects into Workspace",然后点击 "Next"。

    MCUXpresso IDE - 导入
    MCUXpresso IDE - 导入。 点击放大。


  5. 单击 "Select root directory" 旁边的 "Browse...",然后选择 FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/Projects/MCUXpresso 目录。 应该可以看到两个分别名为 FreeRTOSDemo_s 和 FreeRTOSDemo_ns 的项目 出现在了 "Projects" 窗口中,如下所示。点击 "Finish"。

    MCUXpresso IDE - 导入
    MCUXpresso IDE - 导入。 点击放大。


  6. 右键单击 FreeRTOSDemo_s,选择 "Build Project" 以构建非安全端项目。

    MCUXpresso IDE - 构建安全项目
    MCUXpresso IDE - 构建安全项目。 点击放大。


  7. 右键单击 FreeRTOSDemo_s,选择 "Build Project" 以构建非安全端项目。

    MCUXpresso IDE - 构建非安全项目
    MCUXpresso IDE - 构建非安全项目。 点击放大。


  8. 使用 "Debug Link (P6)" 微型 USB 端口为主板供电。

  9. 单击 FreeRTOSDemo_ns,选择非安全端项目。前往 快速启动面板中的 "Debug your project",然后单击 下拉列表中的 "Program flash action using LinkServer",如下所示。

    MCUXpresso IDE - 闪烁非安全二进制文件
    MCUXpresso IDE - 闪烁非安全二进制文件。 点击放大。


  10. LPC-LINK2 探针应已显示在 "Probes Discovered" 窗口中。点击 "OK"。

    MCUXpresso IDE - 闪烁非安全二进制文件
    MCUXpresso IDE - 闪烁非安全二进制文件。 点击放大。


  11. 在 "SWD Configuration" 窗口中选择 SWD 设备 0。点击 "OK"。

    MCUXpresso IDE - 闪烁非安全二进制文件
    MCUXpresso IDE - 闪烁非安全二进制文件。 点击放大。


  12. 您应该会在日志中看到 "Finished writing Flash successfully" 字样。 点击 "OK"。

    MCUXpresso IDE - 闪烁非安全二进制文件
    MCUXpresso IDE - 闪烁非安全二进制文件。 点击放大。


  13. 断开并重新连接微型 USB 数据线,循环主板电源。

  14. 单击 FreeRTOSDemo_s 选择安全端项目。前往 快速启动面板中的 "Debug your project",然后单击 下拉列表中的 "Program flash action using LinkServer",如下所示。

    MCUXpresso IDE - 闪烁安全二进制文件
    MCUXpresso IDE - 闪烁安全二进制文件。 点击放大。


  15. LPC-LINK2 探针应已显示在 "Probes Discovered" 窗口中。点击 "OK"。

    MCUXpresso IDE - 闪烁安全二进制文件
    MCUXpresso IDE - 闪烁安全二进制文件。 点击放大。


  16. 在 "SWD Configuration" 窗口中选择 SWD 设备 0。点击 "OK"。

    MCUXpresso IDE - 闪烁安全二进制文件
    MCUXpresso IDE - 闪烁安全二进制文件。 点击放大。


  17. 您应该会在日志中看到 "Finished writing Flash successfully" 字样。 点击 "OK"。

    MCUXpresso IDE - 闪烁安全二进制文件
    MCUXpresso IDE - 闪烁安全二进制文件。 点击放大。


  18. 断开并重新连接微型 USB 数据线,循环主板电源。

  19. 前往快速启动面板中的 "Debug your project",然后单击 下拉菜单中的 "Debug using LinkServer probes"(如下所示) 以启动调试会话。

    MCUXpresso IDE - 启动调试会话
    MCUXpresso IDE - 启动调试会话。 点击放大。




RTOS配置和使用详情

另请参阅描述 FreeRTOS在 ARMv8-M 核心上运行情况的页面,以及介绍如何设置 ARM Cortex-M 中断优先级用于 FreeRTOS 的页面。
  • 此演示的特定配置项目位于 FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/Projects/MCUXpresso/Config/FreeRTOSConfig.h。 可编辑该文件中定义的常量, 以适配您的应用程序。以下配置选项特定于 ARM Cortex-M33 移植:

    • configENABLE_MPU - 启用/禁用内存保护单元 (MPU)。
    • configENABLE_FPU:启用/禁用浮点单元 (FPU)。
    • configENABLE_TRUSTZONE - 启用/禁用 TrustZone。

  • 如果要在禁用 TrustZone 的情况下运行 FreeRTOS,请将 configENABLE_TRUSTZONE 设置为 0 (在您的 FreeRTOSConfig.h 中设置),并使用 FreeRTOS 移植文件 (位于 FreeRTOS/Source/portable/GCC/ARM_CM33_NTZ 目录下)。

  • 如果要在安全端运行 FreeRTOS,请将 configENABLE_TRUSTZONE 设置为 0, 将 configRUN_FREERTOS_SECURE_ONLY 设置为 1 (在您的 FreeRTOSConfig.h 中设置), 并使用 FreeRTOS/Source/portable/GCC/ARM_CM33_NTZ 目录下的 FreeRTOS 移植文件 。

  • Source/Portable/MemMang/heap_4.c 包含在项目中, 提供 RTOS 内核所需的内存分配。请 参阅 API 文档的内存管理部分 以获取完整信息。

  • vPortEndScheduler() 尚未实现。



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