适用于 Nuvoton NuMaker-PFM-M2351 板的 ARM Cortex-M23 (ARMv8-M) 演示
使用 Keil uVision 和 IAR IDE
[RTOS 移植]
本页面记录预配置的 FreeRTOS 项目,该项目面向
ARM Cortex-M23 核心
(位于 Nuvoton NuMaker-PFM-M2351
板上)。
提供了如下两个项目:
-
一个 IAREmbedded Workbench 项目,
该项目使用 IAR 编译器。
-
一个 Keil uVision 项目,
该项目使用 armclang
编译器。
这些项目演示如何使用 ARM Cortex-M23 TrustZone 和 ARM
Cortex-M23 内存保护单元 (MPU)。
重要提示!FreeRTOS ARM Cortex-M23 移植使用说明
使用此 RTOS 移植之前,请阅读以下所有要点。
- 源代码组织
- 演示应用程序
- 构建和运行 RTOS 演示应用程序
- RTOS配置和使用详情
另请参阅常见问题中的
“我的应用程序没有运行,可能出了什么问题?” ,
描述在
在 ARMv8-M 核心上运行 FreeRTOS 的页面,以及描述
设置
ARM Cortex-M 中断优先级用于 FreeRTOS 的页面。
源代码组织
FreeRTOS zip 文件下载内容中包含所有 FreeRTOS 移植的源代码及
所有演示应用程序。 这意味着它包含的文件数量比
使用 FreeRTOS ARMv8-M Cortex-M23 移植所需的多得多。请参阅
源代码组织页面,了解有关 zip 文件目录结构的信息。
此演示的项目文件组织如下:
-
IAR Embedded Workbench 项目文件位于
FreeRTOS/Demo/CORTEX_MPU_M23_Nuvoton_NuMaker_PFM_M2351_IAR_GCC/Projects/IAR
目录并命名为 FreeRTOSDemo.eww。此 IAR工作区包含两个项目——
一个用于 ARM Cortex-M23 核心安全端,
另一个用于非安全端。这两个项目中编译的 FreeRTOS ARMv8-M Cortex-M23 移植文件
组织如下:
- 在安全端项目中编译的移植文件位于 FreeRTOS/Source/portable/IAR/ARM_CM23/secure 目录下
- 在非安全端项目中编译的移植文件位于 FreeRTOS/Source/portable/IAR/ARM_CM23/non_secure 目录下。
-
Keil uVision 项目文件位于
FreeRTOS/Demo/CORTEX_MPU_M23_Nuvoton_NuMaker_PFM_M2351_IAR_GCC/Projects/Keil
目录并命名为 FreeRTOSDemo.uvmpw。这个 Keil 多项目
工作区包含两个项目,一个是 ARM Cortex-M23 核心安全端项目,
另一个用于非核心安全端。在这两个项目中编译的 FreeRTOS ARMv8-M Cortex-M23
移植文件组织如下:
- 在安全端项目中编译的移植文件位于 FreeRTOS/Source/portable/GCC/ARM_CM23/secure 目录下。
- 在非安全端项目中编译的移植文件位于 FreeRTOS/Source/portable/GCC/ARM_CM23/non_secure 目录下。
演示应用程序
这些项目包括两个演示:
- TrustZone 演示
- 内存保护单元 (MPU) 演示
TrustZone 演示
TrustZone 演示展示了如何从
ARM Cortex-M23 核心安全端导出函数,以及如何从非安全端的 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 演示应用程序
使用 IAR Embedded Workbench IDE
-
下载并安装 Nu-Link USB 驱动程序:
-
双击 FreeRTOS/Demo/CORTEX_MPU_M23_Nuvoton_NuMaker_PFM_M2351_IAR_GCC/Projects/IAR/FreeRTOSDemo.eww
在 IAR Embedded Workbench IDE 中打开它。IAR 工作区
FreeRTOSDemo.eww 包含一个安全项目 (FreeRTOSDemo_s)
以及一个非安全项目 (FreeRTOSDemo_ns)。
-
通过右键单击 “FreeRTOSDemo_s - Release”,然后单击 “Make” 来构建安全项目。
IAR Embedded Workbench IDE - 构建安全项目 点击放大。
-
通过右键单击 “FreeRTOSDemo_ns - Release”,然后单击 “Make” 来构建非安全项目。
IAR Embedded Workbench IDE - 构建非安全项目 点击放大。
-
右键单击 "FreeRTOSDemo_ns - Release",
然后单击 “Set as Active” 将非安全项目设置为活动项目。
IAR Embedded Workbench IDE - 设置非安全项目为活动项目 点击放大。
-
单击 “Project --> Download --> Download active application” 来闪烁非安全二进制文件。
IAR Embedded Workbench IDE - 闪烁非安全二进制文件 点击放大。
-
右键单击 “FreeRTOSDemo_s - Release”
然后单击 “Set as Active”,将安全项目设置为活动项目。
IAR Embedded Workbench IDE - 设置安全项目为活动项目。 点击放大。
-
单击 “Project --> Download --> Download active application” 闪烁安全二进制文件。
IAR Embedded Workbench IDE - 闪烁安全二进制文件。 点击放大。
-
单击 “Project --> Download and Debug” 启动调试会话。
IAR Embedded Workbench IDE - 启动调试会话。 点击放大。
使用 Keil uVision IDE
-
下载并安装 Nu-Link Keil 驱动器:
-
双击 FreeRTOS/Demo/CORTEX_MPU_M23_Nuvoton_NuMaker_PFM_M2351_IAR_GCC/Projects/Keil/FreeRTOSDemo.uvmpw
文件,在 Keil uVision IDE 中打开。Keil 多项目工作区
FreeRTOS Demo.uvmpw 包含一个安全端项目 (FreeRTOSDemo_s)
以及一个非安全项目 (FreeRTOSDemo_ns)。
-
右键单击 “Project: FreeRTOSDemo_s” 将安全项目设置为活动项目
并选择 “Set as Active Project”,将安全项目设置为活动项目。
Keil uVision IDE - 设置安全项目为活动项目。 点击放大。
-
单击 “Project --> Build 'FreeRTOSDemo_s (FreeRTOSDemo_s)” 构建安全项目。
Keil uVision IDE - 构建安全项目。 点击放大。
-
单击 “Project --> Options for FreeRTOSDemo_s - Target 'FreeRTOSDemo_s'...”,打开安全项目的选项窗口。
Keil uVision IDE - 打开安全项目选项。 点击放大。
-
通过单击 Debug 选项卡中 “/fr-content-src/uploads/2019/05/Nuvoton Nu-Link Debugger” 旁边的 “Settings” 按钮,打开 Nu-Link 驱动器设置窗口。
Keil uVision IDE -打开 Nu-Link 驱动器设置。 点击放大。
-
在 “Chip Type” 下拉菜单中选择 “M2351”。
Keil uVision IDE - 选择 M2351。 点击放大。
-
单击窗口上的 “OK”,关闭 “Nu-Link Driver Setup” 和 “Options” 窗口。
-
右键单击 “Project: FreeRTOSDemo_ns”,
并选择 “Set as Active Project”,将非安全项目设置为活动项目。
Keil uVision IDE -设置非安全项目为活动项目。 点击放大。
-
单击 “Project --> Build 'FreeRTOSDemo_ns (FreeRTOSDemo_ns)” 构建非安全项目。
Keil uVision IDE - 构建非安全项目。 点击放大。
-
单击 “Project --> Options for FreeRTOSDemo_ns - Target 'FreeRTOSDemo_ns'...”,打开非安全项目的选项窗口。
Keil uVision IDE - 打开非安全项目选项。 点击放大。
-
通过单击 Debug 选项卡中 “/fr-content-src/uploads/2019/05/Nuvoton Nu-Link Debugger” 旁边的 “Settings” 按钮,打开 Nu-Link 驱动器设置窗口。
Keil uVision IDE -打开 Nu-Link 驱动器设置。 点击放大。
-
在 “Chip Type” 下拉菜单中选择 “M2351”。
Keil uVision IDE - 选择 M2351。 点击放大。
-
单击窗口上的 “OK”,关闭 “Nu-Link Driver Setup” 和 “Options” 窗口。
-
单击 “Flash --> Download” 闪烁非安全二进制文件。
Keil uVision IDE - 闪烁非安全二进制文件。 点击放大。
-
右键单击 “Project: FreeRTOSDemo_s”,
并选择 “Set as Active Project”,将安全项目设置为活动项目。
Keil uVision IDE - 设置安全项目为活动项目。 点击放大。
-
单击 “Flash -- > Download” 闪烁安全二进制文件。
Keil uVision IDE - 闪烁安全二进制文件。 点击放大。
-
单击 “Debug --> Start/Stop Debug Session” 启动调试会话。
Keil uVision IDE - 启动调试会话。 点击放大。
另请参阅
描述
FreeRTOS在 ARMv8-M 核心上运行情况的页面,以及介绍
如何设置
ARM Cortex-M 中断优先级用于 FreeRTOS 的页面。
-
此演示的相关配置项目位于
FreeRTOS/Demo/CORTEX_MPU_M23_Nuvoton_NuMaker_PFM_M2351_IAR_GCC/Projects/Keil/ConfigFreeRTOSConfig.h
(Keil uVision IDE 项目中的)目录和
FreeRTOS/Demo/CORTEX_MPU_M23_Nuvoton_NuMaker_PFM_M2351_IAR_GCC/Projects/IAR/ConfigFreeRTOSConfig.h
(IAR Embedded Workbench IDE 项目中的)目录。该文件中定义的 常量
可进行编辑以适配您的应用程序。以下配置
选项适配于 ARM Cortex-M23 移植:
- configENABLE_MPU - 启用/禁用内存保护单元 (MPU)。
- configENABLE_TRUSTZONE - 启用/禁用 TrustZone。
-
如果要在禁用 TrustZone 的情况下运行 FreeRTOS,请将 configENABLE_TRUSTZONE 设置为 0
(在您的 FreeRTOSConfig.h 中设置),并使用 FreeRTOS 移植文件
(位于 FreeRTOS/Source/portable/GCC/ARM_CM23_NTZ 目录下,适用于 GCC;
和 FreeRTOS/Source/portable//IARARM_CM23_NTZ 目录下,
适用于 IAR)。
-
如果要在安全端运行 FreeRTOS,请将 configENABLE_TRUSTZONE 设置
设置为 0 和将 configRUN_FREERTOS_SECURE_ONLY 设置为 1(位于您的 FreeRTOSConfig.h)
并使用 FreeRTOS 移植文件(位于 FreeRTOS/Source/portable/GCC/ARM_CM23_NTZ 目录下,
适用于 GCC;和位于 FreeRTOS/Source/portable/IAR/ARM_CM23_NTZ 目录下,
适用于 IAR)。
-
Source/Portable/MemMang/heap_4.c 包含在项目中
提供 RTOS 内核所需的内存分配。请
参阅 API 文档的内存管理部分
以获取完整信息。
-
vPortEndScheduler() 尚未实现。
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.