简介此页面描述了一个演示项目,该项目使用了 FreeRTOS 和 FreeRTOS-Plus-CLI, 在来自 Atmel 的 SAMD20 Cortex-M0+ 微控制器上。该项目使用 FreeRTOS ARM Cortex-M0 GCC 端口、通过免费的 Atmel Studio IDE(使用 Visual Studio 框架 并且包括一个内核意识FreeRTOS插件)构建 ,并且针对 成本非常低的 SAMD20 Xplained Pro 评估板。 命令行接口字符输入和输出使用 AtmelAtmel软件框架( ASF )中提供的驱动程序。 #define 用于在简单的 blinky 应用程序和 包含 FreeRTOS-Plus-CLI 组件的综合测试和演示应用程序之间 切换构建。
带有 Kernel Aware FreeRTOS 插件的 Atmel Studio IDE
重要!关于使用 SAMD20 ARM Cortex-M0 + 演示的说明在使用此 RTOS 端口之前,请阅读以下所有要点。另请参阅常见问题我的应用程序 未运行,问题可能出在哪里?
源代码组织FreeRTOS 下载包含所有 FreeRTOS 端口的源代码,因此 包含比 SAMD20 演示所需更多的文件。 请参阅源代码组织章节, 了解目录结构说明。Atmel Studio 解决方案文件名为RTOS Demo.atsln ,位于 FreeRTOS/演示/CORTEX_M0 +_Atmel_SAMD20_Xplained 目录。
构建和运行 ARM CORTEX-M0 + RTOS应用程序
演示应用程序功能mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 设置为 1 的功能在 mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 设置为 1 的情况下进行构建会导致 main () 调用 main_blinky ()。 main_blinky () 演示的介绍如下。
mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 设置为 0 的功能在 mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 设置为 0 的情况下进行构建会导致 main () 调用 main_full ()。 下面描述了 main_full () 演示。
RTOS配置和使用详情中断服务程序导致上下文切换的中断服务程序 无特殊要求。 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 +_Atmel_SAMD20_Xplained/RTOSDemo/src/config/FreeRTOSConfig.h 中。 开发人员 编辑 FreeRTOSConfig.h 中定义的常量,使其适合您的应用程序。 尤其是以下常量:
每个移植都将 "BaseType_t" 定义为 最高效的数据类型。 所有 ARM Cortex-M0 + 端口都将 BaseType_t 定义为长类型。 请注意 vPortEndScheduler () 尚未实现。 内存分配Source/Portable/MemMang/heap_4.c 包含在 ARM Cortex-M0 + 演示应用项目中,以提供 RTOS 内核所需的内存分配。 请参阅 API 文档的内存管理部分, 获取完整信息。Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|