XMC1300 boot 套件
简介
本页介绍了适用于 ARM Cortex-M0 微控制器的 Infineon XMC1000 系列的演示应用程序
。
以下 ARM Cortex-M0 编译器均已提供预配置项目:
每个项目包含三个构建配置,
分别对应以下三个 XMC1000 评估板:
每个构建配置均可以使用 #define 进一步配置,
来创建简单的 blinky 风格应用程序,或更全面的测试和演示
应用程序。
FreeRTOS 状态查看器插件的屏幕截图
该插件为 IAR IDE 附带
注意: 如果 IAR 项目未能构建,可能是 IAR
Embedded Workbench 版本过低。 如果构建失败,
那么也可能是项目文件(在无提示的情况下)已经损坏,因此需要
从主 FreeRTOS zip 下载文件还原到原始状态后才可以构建,
即使 EWARM 版本已更新。
重要!使用 XMC1000 ARM Cortex-M0 演示的注意事项
使用此 RTOS 端口之前,请阅读以下所有要点。
- 源代码组织
- 演示应用程序
- RTOS 配置和使用详情
另请参阅常见问题我的应用程序
未运行,问题可能出在哪里?
源代码组织
FreeRTOS 下载包含所有 FreeRTOS 移植的源代码,
因此包含的文件比 XMC1000 演示所需的文件多得多。
请参阅源代码组织
了解关于已下载文件的说明
和新项目创建的信息。
支持的所有三个编译器的项目文件位于
FreeRTOS/Demo/CORTEX_M0_Infineon_XMC1000_IAR_Keil_GCC 目录。
-
IAR Embedded Workbench 项目名为 RTOSDemo.eww。
-
Keil 项目名为 RTOSDemo.uvproj 。
-
Atollic TrueSTUDIO 项目采用常见的 Eclipse 项目名称 .project 。
构建和运行 ARM CORTEX-M0 RTOS 应用程序
RTOS 演示项目可配置为
运行简单的 "blinky" 风格的项目,或者更全面的测试和演示应用程序。 main.c 顶部的
mainCREATE_SIMPLE_BLINKY_DEMO_ONLY
设置用于在两者之间进行选择。
将 mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 设置为 1,
可创建基本的 Blinky 演示。 将 mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 设置为 0,
可创建更全面的测试和演示应用程序。 在构建项目之前,
请确定已设置 mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 常量。
演示使用了内置在 Boot 套件 PCB 上的 LED ,
因此不需要任何硬件设置。 任何跳线和开关都应保持在
默认位置。
以下各小节介绍了如何使用这三种
支持的 ARM Cortex-M0 编译器和工具链。
-
使用 IAR Embedded Workbench 构建
-
使用 ARM Keil 构建
-
使用 ARM GCC 在 Atollic TrueSTUDIO Eclipse IDE 构建
-
打开 FreeRTOS/Demo/CORTEX_M0_Infineon_XMC1000_IAR_Keil_GCC/RTOSDemo.eww
(位于 IAR Embedded Workbench IDE 中)。
-
为目标硬件的构建配置设置正确选项。
XMC1100、XMC1200 和 XMC1300 boot 套件的构建配置已提供
。 使用 EWARM IDE 工作区窗口顶部的下拉列表
设置活动构建配置。
-
从 IAR Embedded Workbench 的 "Project" 菜单中选择 "Rebuild All"(或按 F7)
以构建演示项目。
-
用 USB 缆线连接 主机和所选 XMC1000 boot 套件上的 USB 端口。
-
在 IAR Embedded Workbench 的 "Project" 菜单中选择 "Download and Debug"
对微控制器闪存进行编程并启动调试会话
。
-
打开 FreeRTOS/Demo/CORTEX_M0_Infineon_XMC1000_IAR_Keil_GCC/RTOSDemo.uvproj
(位于 Keil IDE 中)。
-
为目标硬件的构建配置(在 Keil IDE 中称为目标 )
设置正确选项。
XMC1100、XMC1200 和 XMC1300 boot 套件的构建配置已提供
。 活动构建配置通常显示在
IDE 菜单工具栏的下拉列表中。
-
从 Keil 的 "Project" 菜单中选择 "Rebuild Target"(或按 F7)
以构建演示项目。
-
用 USB 缆线连接 主机和所选 XMC1000 boot 套件上的 USB 端口。
-
从 Keil 的 "Project" 菜单中选择 "Start/Stop Debug Session"
对微控制器闪存进行编程并启动调试会话
。
请注意, Eclipse 项目使用的文件引用与项目位置相关。
该项目或其引用的任何文件不得
改变其在 FreeRTOS 目录结构中的默认位置
(此目录结构在 FreeRTOS 下载包解压时创建)。
-
启动 Eclipse IDE ,根据提示创建创建一个新的或选择一个现有的
工作区。
-
在 IDE 的 "File" 菜单中选择 "Import"。 系统将显示
如下对话框。 选择 "General->Existing Project into Workspace",如下所示。
首次点击 "Import" 时显示的对话框
-
在下一个对话框中,选择 FreeRTOS/Demo/CORTEX_M0_Infineon_XMC1000_IAR_Keil_GCC
作为根目录。 确保 RTOSDemo 项目在 "Projects" 区域中已勾选,
并确保 “Copy Projects Into Workspace”
未勾选,然后单击
"Finish" 按钮(请参阅下图查看正确的复选框状态)。
确保 RTOSDemo 已勾选,并且未勾选 "Copy projects into workspace"
-
导入项目后,右键单击 Eclipse 项目浏览器窗口中的项目名称,
然后使用弹出菜单中的 "Build Configurations->Set Active" 选项,
为目标硬件的构建配置设置正确选项。
XMC1100、XMC1200 和 XMC1300 boot 套件的构建配置已提供
。
-
从 Eclipse 的 "Project" 菜单中选择 "Rebuild Project",
以构建演示项目。
-
用 USB 缆线连接 主机和所选 XMC1000 boot 套件上的 USB 端口。
-
从 Eclipse 的 "Run" 菜单中选择 "Debug",
以进行启动配置,
用于对微控制器闪存进行编程并启动调试会话。
演示应用程序功能
mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 设置为 1 时的功能
mainCREATE_SIMPLE_BLINKY_DEMO_ 设置为1时,进行构建会导致 main () 调用
main_blinky()。 main_blinky() 创建了一个非常简单的演示程序,
请参阅下文。
mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 设置为 0 时的功能
mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 设置为0时,进行构建会导致 main () 调用
main_full()。 main_full() 会创建更全面的测试和演示应用程序,
请参阅下文。
-
main_full() 函数:
main_full () 创建了一组标准演示任务 ,一些应用程序专用
测试任务和一个定时器。 然后它会启动
调度器。
-
“寄存器测试”任务:
这些任务用已知值填充寄存器,然后检查
每个寄存器在整个任务生命周期内是否保持其预期值
。 每个任务使用不同的值集。 寄存器测试任务以非常低的优先级执行,
因此经常被抢占。 包含意外值的寄存器
表示上下文切换机制中存在错误
。
-
“中断信号量获取”任务
此任务仅阻止
tick hook 函数(在 main.c 中定义)“释放”的信号量。 任务
接收信号量时,会切换 LED 4。 信号量
每隔50 毫秒释放一次,因此 LED 4 每50 毫秒就切换一次。
-
“检查”软件定时器:
检查软件定时器的周期最初设置为三
秒。 其回调函数检查所有标准演示任务和
寄存器检查任务是否仍在执行,
且执行时是否报告任何错误。 如果检查定时器回调发现
任务已停顿,或报告了错误,之后它会将
检查定时器的周期从最初的三秒钟更改为仅 200 毫秒。 每次调用回调函数时,
也会切换 LED 5。 系统状态
的直观体现为: 如果 LED 5 每三秒钟切换一次,
则表示没有发现任何问题。 如果 LED 每 200 毫秒切换一次,
则已在至少一个任务中发现问题。
中断服务程序
导致上下文切换的中断服务程序
无特殊要求。
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 );
}
请注意,FreeRTOSConfig.h中包含了以下行,以将中断处理程序函数名称FreeRTOS映射
中断处理程序函数映射到 CMSIS 中断处理程序函数名称上。
这使编译器工具供应商提供的链接器脚本可
在无需修改的情况下使用。
#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#define xPortSysTickHandler SysTick_Handler
RTOS 移植特定配置
这些演示的特定配置项目包含在 FreeRTOS/Demo/CORTEX_M0_Infineon_XMC1000_IAR_Keil_GCC/FreeRTOSConfig.h 中。 编译在此项目中的
编辑 FreeRTOSConfig.h 中定义的常量,使其适合您的应用程序。 尤其是以下常量:
每个移植都将 "BaseType_t" 定义为
对处理器而言最有效的数据类型。 所有 ARM Cortex-M0 移植都将 BaseType_t 定义为长整型。
请注意,vPortEndScheduler() 尚未实现。
在抢占式和协同式 RTOS 内核之间切换
将 FreeRTOS/Demo/CORTEX_M0_Infineon_XMC1000_IAR_Keil_GCC/FreeRTOSConfig.h 内的定义 configUSE_PREEMPTION 设置为 1,可使用抢占式调度;
设置为 0,则可使用协同式。
内存分配
Source/Portable/MemMang/heap_4.c 包含在 ARM Cortex-M0 演示应用程序项目中,用于
RTOS 内核所需的内存分配。
请参阅 API 文档的内存管理部分,
获取完整信息。
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.