适用于 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 移植之前,请阅读以下所有要点。
- 源代码组织
- 演示应用程序
- 构建和运行 RTOS 演示应用程序
- 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 目录下。
演示应用程序
该项目包括两个演示:
- TrustZone 演示
- 内存保护单元 (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 演示调用序列
内存保护单元 (MPU) 演示
MPU 演示展示了如何使用 MPU
授予各个内存区域的任务特定访问许可。MPU 演示包含以下两个任务:
构建并运行 RTOS 演示应用程序
-
启动 the MCUXpresso IDE。请注意,您需要 MCUXpresso IDE 版本 10.3.1 或更高版本
,才能构建和运行此演示。
-
选择工作区目录,然后点击 "Launch"。
MCUXpresso IDE - 启动器。点击放大。
-
单击 "File --> Import...",打开导入项目对话框。
MCUXpresso IDE - 导入。 点击放大。
-
选择 "General --> Existing Projects into Workspace",然后点击 "Next"。
MCUXpresso IDE - 导入。 点击放大。
-
单击 "Select root directory" 旁边的 "Browse...",然后选择
FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/Projects/MCUXpresso 目录。
应该可以看到两个分别名为 FreeRTOSDemo_s 和 FreeRTOSDemo_ns 的项目
出现在了 "Projects" 窗口中,如下所示。点击 "Finish"。
MCUXpresso IDE - 导入。 点击放大。
-
右键单击 FreeRTOSDemo_s,选择
"Build Project" 以构建非安全端项目。
MCUXpresso IDE - 构建安全项目。 点击放大。
-
右键单击 FreeRTOSDemo_s,选择
"Build Project" 以构建非安全端项目。
MCUXpresso IDE - 构建非安全项目。 点击放大。
-
使用 "Debug Link (P6)" 微型 USB 端口为主板供电。
-
单击 FreeRTOSDemo_ns,选择非安全端项目。前往
快速启动面板中的 "Debug your project",然后单击
下拉列表中的 "Program flash action using LinkServer",如下所示。
MCUXpresso IDE - 闪烁非安全二进制文件。 点击放大。
-
LPC-LINK2 探针应已显示在 "Probes Discovered" 窗口中。点击 "OK"。
MCUXpresso IDE - 闪烁非安全二进制文件。 点击放大。
-
在 "SWD Configuration" 窗口中选择 SWD 设备 0。点击 "OK"。
MCUXpresso IDE - 闪烁非安全二进制文件。 点击放大。
-
您应该会在日志中看到 "Finished writing Flash successfully" 字样。
点击 "OK"。
MCUXpresso IDE - 闪烁非安全二进制文件。 点击放大。
-
断开并重新连接微型 USB 数据线,循环主板电源。
-
单击 FreeRTOSDemo_s 选择安全端项目。前往
快速启动面板中的 "Debug your project",然后单击
下拉列表中的 "Program flash action using LinkServer",如下所示。
MCUXpresso IDE - 闪烁安全二进制文件。 点击放大。
-
LPC-LINK2 探针应已显示在 "Probes Discovered" 窗口中。点击 "OK"。
MCUXpresso IDE - 闪烁安全二进制文件。 点击放大。
-
在 "SWD Configuration" 窗口中选择 SWD 设备 0。点击 "OK"。
MCUXpresso IDE - 闪烁安全二进制文件。 点击放大。
-
您应该会在日志中看到 "Finished writing Flash successfully" 字样。
点击 "OK"。
MCUXpresso IDE - 闪烁安全二进制文件。 点击放大。
-
断开并重新连接微型 USB 数据线,循环主板电源。
-
前往快速启动面板中的 "Debug your project",然后单击
下拉菜单中的 "Debug using LinkServer probes"(如下所示)
以启动调试会话。
MCUXpresso IDE - 启动调试会话。 点击放大。
另请参阅
描述
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.