简介
此页面记录的演示应用程序面向 ARM Cortex-M4F 微控制器的 Infineon XMC4000
系列。
此演示为以下 ARM Cortex-M4 编译器提供了预配置项目:
四个项目每个均包含三个构建配置,
每个构建配置均针对以下 XMC4000 Hexagon 应用程序套件中的一个:
各构建配置均可编译以创建简单的 blinky 演示,
或全面的测试和演示应用程序。 构建说明见下文
。
FreeRTOS 状态查看器插件的屏幕截图
该插件为 IAR IDE 附带
注意 1:FreeRTOS 下载中的项目包括特殊设置,
目的是解决 XMC4000 芯片勘误表。 请参阅
构建说明,
了解各编译器的更多信息。
注意 2:IAR 项目将无法构建并会损坏(因此无法再
与任何 IAR 版本一起使用)的情况为:打开该项目的 EWARM 版本比
最初创建项目时所用版本更低。
。
重要!使用 XMC4000 ARM Cortex-M4F 演示的注意事项
使用此 RTOS 移植之前,请阅读以下所有要点。
- 源代码组织
- 演示应用程序
- RTOS 配置和使用详情
另请参阅常见问题我的应用程序
未运行,问题可能出在哪里?
源代码组织
FreeRTOS 下载文件包含所有 FreeRTOS 移植的源代码,
因此包含的文件远多于 XMC4000 演示所需的文件。
请参阅源代码组织
了解关于已下载文件的说明
和创建新项目的信息。
-
IAR 嵌入式工作区项目称为 RTOSDemo.eww,位于
FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_IAR 目录下。
-
Keil 项目称为 RTOSDemo.uvproj,位于
FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_Keil 目录下。
-
Dave 项目采用常见的 Eclipse 项目名称 .project,
位于 FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_GCC_Dave
目录下。
-
Tasking 项目采用常见的 Eclipse 项目名称 .project,
位于 FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_GCC_Tasking
目录下。
构建和运行 ARM CORTEX-M4F RTOS 应用程序
RTOS 演示项目可进行配置,以构建
简单的 "blinky" 项目,或全面的测试和演示应用程序。 常量
mainCREATE_SIMPLE_BLINKY_DEMO_ONLY,定义于 main.c 的顶层,
用于在二者之间进行切换。 如果将 mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 设置为 1,
则可创建简单演示。 如果将 mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 设置为 0,
则可创建全面的演示。
演示使用内置在每个 Hexagon 应用程序套件板上的 LED,
因此不需要任何硬件设置。
XMC4200 和 XMC4400 Hexagon 套件具有内置的 J-Link 调试器接口。 这些板
可以通过 USB 线直接连接到主计算机,
无需其他连接。 这些 Hexagon 板各有两个 USB 连接器,
因此需小心使用标记着“调试 USB” 的连接器。
XMC4500 Hexagon 套件没有内置的 J-Link,
因此需要两个连接:
- 为调试器提供接口的连接:
连接一个外部调试器接口,
使其介于主计算机和 XMC4500 Hexagon 印刷电路板的两个调试端口中的一个之间。 由于所提供的
项目被配置为使用 J-Link,因此如果使用任何其他
兼容设备,将需要对项目选项进行
适当更新。
-
为硬件提供电源的连接:
请在 XMC4500 Hexagon 印刷电路板的 USB OTG 连接器和任何方便的 USB 主机之间
连接一条 USB 电缆线。
以下各小节提供了四个
支持 ARM CORTEX-M4 编译器的使用说明。
-
使用 IAR Embedded Workbench 构建
-
使用 ARM Keil 构建
-
使用 DAVE Eclipse IDE 与 ARM GCC 构建
-
使用 Tasking ARM VX-toolset 构建
注意:如果目前使用的 XMC4000 设备包含勘误表号 PMC_001,
则必须在 FreeRTOSConfig.h 中将 WORKOUND_PMU_CM001 定义(#define)为 1,
在启动文件中也进行同样的设置。 FreeRTOS 下载中的项目已包含
这些设置。
-
打开 FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_IAR/RTOSDemo.eww
(位于 IAR Embedded Workbench IDE 中)。
-
为目标硬件的构建配置设置正确选项。
为 XMC4200、XMC4400 和 XMC4500 Hexagon 应用程序套件
提供了构建配置。 使用 EWARM IDE 工作区窗口顶部的下拉列表
设置活动构建配置。
-
从 IAR Embedded Workbench 的 "Project" 菜单中选择 "Rebuild All"(或按 F7)
以构建演示项目。
-
从 IAR Embedded Workbench 的 "Project" 菜单中选择 "Download and Debug",
对微控制器闪存进行编程并启动调试会话
。
注意:如果目前使用的 XMC4000 设备包含勘误表号 PMC_001,
则必须在 FreeRTOSConfig.h 中将 WORKOUND_PMU_CM001 定义(#define)为 1,
在启动文件中也进行同样的设置。 FreeRTOS 下载中的项目已包含
这些设置。
-
在 Keil IDE 中打开 FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_Keil/RTOSDemo.uvproj
。
-
为目标硬件的构建配置(在 Keil IDE 中称为目标 )
设置正确选项。
为 XMC4200、XMC4400 和 XMC4500 Hexagon 应用程序套件
提供了构建配置。 活动构建配置通常
显示在 IDE 菜单工具栏的 下拉列表中。
-
从 Keil 的 "Project" 菜单中选择 "Rebuild Target"(或按 F7)
演示项目。
-
从 Keil 的 "Project" 菜单中选择 "Start/Stop Debug Session",
对微控制器闪存进行编程并启动调试会话
。
注意:如果目前使用的 XMC4000 设备包含勘误表号 PMC_001,
则必须在 FreeRTOSConfig.h 中将 WORKOUND_PMU_CM001 定义(#define)为 1,
在启动文件中也进行同样的设置。 FreeRTOS 下载中的项目已包含
这些设置。
-
执行 CreateProjectDirectoryStructure.bat
批处理文件(位于 FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_GCC_Dave
目录下),然后再打开项目。
该操作会将所需的文件复制到本地目录中。
-
启动 DAVE Eclipse IDE,根据提示创建一个新的或选择一个现有的
工作区。
-
在 IDE 的 "File" 菜单中选择 "Import"。 系统将显示
如下对话框。 选择 "General->Existing Project into Workspace",如下所示。
首次点击 "Import" 时显示的对话框
-
在下一个对话框中,选择 FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_GCC_Dave
作为根目录。 确保 RTOSDemo 项目在 "Projects" 区域中已勾选,
并确保 “Copy Projects Into Workspace”
未勾选,然后单击
"Finish" 按钮(请参阅下图查看正确的复选框状态)。
确保 RTOSDemo 已勾选,且确保 "Copy projects into workspace" 未勾选
-
导入项目后,右键单击 DAVE Eclipse 项目资源管理器窗口中的项目名称,
然后在弹出菜单中选择
"Build Configurations->Set Active",
为目标硬件的构建配置设置正确选项。
为 XMC4200、XMC4400 和 XMC4500 Hexagon 应用程序套件
提供了构建配置。
-
从 DAVE Eclipse "Project" 菜单中选择 "Rebuild Project"
以构建演示项目。
-
从 Eclipse 的 "Run" 菜单中选择 "Debug",
以进行启动配置,
用于对微控制器闪存进行编程并启动调试会话。
注意:
在撰写本文时,DAVE 项目中的每个构建配置
必须针对完全相同的微控制器部件号。 然而,在交付的构建配置中
可选择包含和排除芯片特定文件,
因此项目会正确构建,
尽管在启动调试会话时还需要额外的步骤;请检查调试启动
配置,以确保配置适用于实际使用的硬件
(请参阅下图)。 调试会话启动时,调试器可能也会发出警告,
只要启动配置是针对所使用的硬件正确配置的,
就可以忽略这个警告
。
在调试启动配置中选择目标
注意:如果目前使用的 XMC4000 设备包含勘误表号 PMC_001,
则链接器宏 SILICON_BUG_PMC_CM_001 必须在项目设置中。
FreeRTOS 下载中的项目已包含此设置。
-
执行 CreateProjectDirectoryStructure.bat
批处理文件(位于 FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_GCC_Tasking
目录下),然后再打开项目。
该操作会将所需的文件复制到本地目录中。
-
DAVE 和 Tasking 都使用 Eclipse IDE,
因此您可以按照使用 DAVE 构建应用程序的说明,
确保将项目导入 Eclipse 中,
项目位于 FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_GCC_Tasking
目录下。
演示应用程序功能
简单 blinky 示例
当 mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 设置为 1 时,会创建简单 blinky 示例
。 mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 定义在 main.c 中。
main() 会调用 main_blinky():
全面测试和演示应用
当 mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 设置为 0 时,
会创建全面的示例。 mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 在 main.c 中定义。
main() 会调用 main_full():
中断服务程序
导致上下文切换的中断服务程序
无特殊要求。
portEND_SWITCHING_ISR() 宏可用于从 ISR 内请求上下文切换。
请注意,portEND_SWITCHING_ISR() 将启用中断。
在
main.c 的末端提供了名为 Dummy_IRQHandler() 的示例中断处理程序作为参考实现。
此外,还将 Dummy_IRQHandler() 复制到了下方。
void Dummy_IRQHandler(void)
{
long lHigherPriorityTaskWoken = pdFALSE;
/* Clear the interrupt if necessary. */
Dummy_ClearITPendingBit();
/* This interrupt does nothing more than demonstrate how to synchronise a
task with an interrupt. A semaphore is used for this purpose. Note
lHigherPriorityTaskWoken is initialised to zero. Only FreeRTOS API functions
that end in "FromISR" can be called from an ISR! */
xSemaphoreGiveFromISR( xTestSemaphore, &lHigherPriorityTaskWoken );
/* If there was a task that was blocked on the semaphore, and giving the
semaphore caused the task to unblock, and the unblocked task has a priority
higher than the current Running state task (the task that this interrupt
interrupted), then lHigherPriorityTaskWoken will have been set to pdTRUE
internally within xSemaphoreGiveFromISR(). Passing pdTRUE into the
portEND_SWITCHING_ISR() macro will result in a context switch being pended to
ensure this interrupt returns directly to the unblocked, higher priority,
task. Passing pdFALSE into portEND_SWITCHING_ISR() has no effect. */
portEND_SWITCHING_ISR( lHigherPriorityTaskWoken );
}
请注意!: 请参阅说明如何在 ARM Cortex-M 设备上设置中断优先级的页面。 请记住,ARM Cortex-M 核心中,
数字越小表示中断优先级越高。 这一点
可能有悖直觉,容易混淆! 如果要将
中断设置为低优先级,请不要将其优先级指定为 0(或其他低数值),
因为这会导致该中断在系统中具有
最高优先级,并且如果这个优先级
高于 configMAX_SYSCALL_INTERRUPT_PRIORITY,可能会导致系统崩溃。 另外,请勿忘记
分配中断优先级,因为默认情况下,中断优先级为 0,
这可能导致其处于最高优先级。
ARM Cortex-M 核心上的最低优先级实际上是 255,但不同
ARM Cortex-M 微控制器制造商会实现不同数量的优先级位,
并提供优先级指定方式不同的库函数。 例如,
Infineon ARM Cortex-M4 微控制器上可以指定的最低优先级实际上为 63,这是由
FreeRTOSConfig.h 中的常量 configLIBRARY_LOWEST_INTERRUPT_PRIORITY 定义的。 可指定的最高优先级
始终为零。
我们还建议确保将所有优先级位分配为
抢占式优先级位,并且不设置子优先级位,就和演示
中的一样。
请注意,FreeRTOSConfig.h 中包含了以下行,目的是将 FreeRTOS
中断处理程序函数映射到 CMSIS 中断处理程序函数名称上。
这使编译器工具供应商提供的链接器脚本可
在无需修改的情况下使用。
#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#define xPortSysTickHandler SysTick_Handler
RTOS 移植特定配置
这些演示的特定配置项目FreeRTOSConfig.h位于
文件中,该文件位于项目文件所在的目录。 您可以
编辑 FreeRTOSConfig.h 中定义的常量,使其适合您的应用程序。 尤其是以下常量:
每个移植都将 "BaseType_t" 定义为
。 所有 ARM Cortex-M4F 移植都将 BaseType_t 的类型定义为 long。
请注意 vPortEndScheduler() 尚未实现。
内存分配
Source/Portable/MemMang/heap_4.c 包含在 ARM CORTEX-M4F 演示应用程序项目中,用以提供
RTOS 内核所需的内存分配。
请参阅 API 文档的内存管理部分,
获取完整信息。
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.