下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

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

ARM Cortex-M33 (ARMv8-M) Keil 模拟器演示
使用 Keil uVision IDE
[RTOS 移植]



本页面记录了一个预配置的 FreeRTOS 项目, 该项目面向 Keil uVision ARM Cortex-M33 模拟器,使用 armclang 编译器来构建 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_Simulator_Keil_GCC 目录下,名为 FreeRTOSDemo.uvmpw。此 Keil 多项目工作区包含两个项目, 一个是 ARM Cortex-M33 核心安全端项目, 另一个是 ARM Cortex-M33 核心非安全端项目。在这两个项目中编译的 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. 双击 FreeRTOS/Demo/CORTEX_MPU_M33F_Simulator_Keil_GCC/FreeRTOSDemo.uvmpw 文件,在 Keil uVision IDE 中打开。Keil 多项目工作区 FreeRTOS Demo.uvmpw 包含一个安全端项目 (FreeRTOSDemo_s) 以及一个非安全项目 (FreeRTOSDemo_ns)。

  2. 右键单击 “Project: FreeRTOSDemo_s” 将安全项目设置为活动项目 并选择 “Set as Active Project”,将安全项目设置为活动项目。

    Keil uVision IDE - 设置安全项目为活动项目
    Keil uVision IDE - 设置安全项目为活动项目。 点击放大。
  3. 单击 "Project --> Build 'FreeRTOSDemo_s (FVP Simulation Model)'",构建安全端项目。

    Keil uVision IDE - 构建安全端项目
    Keil uVision IDE - 构建安全项目。 点击放大。
  4. 右键单击 "Project: FreeRTOSDemo_ns" 并选择 并选择 “Set as Active Project”,将非安全项目设置为活动项目。

    Keil uVision IDE - 将非安全端项目设置为活动状态
    Keil uVision IDE -设置非安全项目为活动项目。点击放大。
  5. 单击 "Project --> Build 'FreeRTOSDemo_ns (FVP Simulation Model)'",构建非安全端项目。

    Keil uVision IDE - 构建非安全端项目
    Keil uVision IDE - 构建非安全项目。点击放大。
  6. 单击 "Debug -> Start/Stop Debug Session",启动调试会话。

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



RTOS配置和使用详情

另请参阅描述 FreeRTOS在 ARMv8-M 核心上运行情况的页面,以及介绍如何设置 ARM Cortex-M 中断优先级以便和 FreeRTOS 一起使用的页面。
  • 此演示的特定配置项包含在 FreeRTOS/Demo/CORTEX_MPU_M33F_Simulator_Keil_GCC/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.