简介本页记录了 MSP430X / MSP430F5438 微控制器的 FreeRTOS 演示应用程序 (该控制器由 Texas Instruments 提供)。 演示使用 IAR 适用于 MSP430 的 Embedded Workbench (来自 IAR Systems),面向官方 MSP-EXP430F5438 实验板(如果您希望使用替代开发板,我们也提供了说明 )。建议不要尝试在在低于 V5.20 的 IAR Embedded Workbench 版本 中打开演示项目,因为这样做会在不知情的情况下损坏项目文件。 移植和演示项目使用“大型”和“小型”数据模型进行开发和测试。 下面的构建配置表包含 有关使用小数据模型的重要信息。
此演示项目演示的 FreeRTOS 功能该项目演示了以下 FreeRTOS 功能和技术:
注意:如果项目构建失败,可能是使用的 IAR 嵌入式工作台版本过低。 如果构建失败, 那么也可能是项目文件(在无提示的情况下)已经损坏,因此需要 将其恢复至初始状态,然后才能使用新版本的 IAR 构建项目。
重要!使用 MSP430X IAR 演示的注意事项使用此 RTOS 端口之前,请阅读以下所有要点。另请参阅常见问题我的应用程序 未运行,问题可能出在哪里? 源代码组织FreeRTOS 下载内容包含所有 FreeRTOS 移植的源代码,因此 包含的文件比此演示所需更多的文件。 请参阅本网站源代码组织部分, 了解关于已下载文件的说明 的相关信息。MSP430F5438 演示的 IAR 工作区文件为 RTOSDemo.eww, 位于 FreeRTOS/Demo/MSP430X_MSP430F5438_IAR 目录下。
演示应用程序演示应用程序硬件设置演示应用程序包含中断驱动的 UART 测试。 这会产生两个 任务,包括一个发送任务和一个接收任务。 传输任务将字符发送到 UCA1 上,然后接收任务在同一个 UCA1 外围设备上接收字符。 接收任务 接收任务期望接收发送任务发送的字符,但由于 没有外部 9 路连接器,硬件内部配置为使用 环回模式。 因此,与其他 FreeRTOS 演示不同,无需 将外部环回连接器安装到 UART 即可进行 COM 端口测试。请注意,UART 中断服务程序的实现是为了演示从 中断服务程序内部使用队列。 该示例无法 高效中断实现。 真正的应用程序应该 使用 DMA。 或至少传送和接收可使用 简单的 RAM 环形缓冲区,并在接收或传送完整消息时 使用信号量与任务同步。 该移植使用 Texas Instruments MSP-FET430UIF USB 调试接口 进行开发和测试。
构建和运行演示应用程序IAR 项目包含三项构建配置。 所有的构建配置 都展示了相同的功能,但具有不同的运行时模型和优化 设置,如下表所述。
功能性此网页顶部列出了 MSP430X5438 演示项目演示的 FreeRTOS 功能。 main.c 源文件中包含的注释 提供了有关如何实现和实现此功能的 更多信息。演示正确执行时,将观察到以下行为:
FreeRTOS 调试会话期间的屏幕截图。 经证明, FreeRTOS 状态查看器插件窗口可以在屏幕截图底部看到。 运行时间统计信息可以在终端 IO 窗口中看到。
RTOS配置和使用详情配置 RTOS 滴答中断FreeRTOS 需要独占使用定时器,该定时器能够生成 称为 RTOS “滴答”中断的快速周期性中断。 定时器在 用户可定义的钩子(或回调)函数中配置,因此应用程序编写者 可以灵活地决定实际使用哪个定时器外围设备。 钩子函数的名称和原型 如下图所示:void vApplicationSetupTimerInterrupt( void ); 须将常量 configTICK_VECTOR 设置为 所选外围设备的中断向量号。 configTICK_VECTOR 在 FreeRTOSConfig.h 头文件 中定义。 此演示项目包括 vApplicationSetupTimerInterrupt() 的实现,该实现配置时间 TA0 以生成滴答 中断,因此将 configTICK_VECTOR 设置为 TIMER0_A0_VECTOR。 仅在正 开发的应用程序需要 TA0 空闲用于其他目的时, 才必须修改提供的代码。 RTOS 端口特定配置这些演示的特定配置项目包含在 FreeRTOS/Demo/MSP430X_MSP430F5438_IAR/FreeRTOSConfig.h 中。 可编辑 此文件中定义的常量,使其适合您的应用程序。 尤其是:
每个移植都将 "BaseType_t" 定义为 对处理器而言最有效的数据类型。 此移植将 BaseType_t 定义为短整型。 请注意 vPortEndScheduler() 尚未实现。 中断服务程序与大多数移植不同,导致上下文切换的中断服务程序 无特殊要求,可根据编译器文档编写。 宏 portYIELD_FROM_ISR() 可用于从 ISR 内请求上下文切换。 请注意,portYIELD_FROM_ISR() 须为 ISR 中的最后一个语句。此演示项目提供了 FreeRTOS 中断服务程序示例, 即 main.c 中定义的 prvSelectButtonInterrupt() 和 serial.c 中 定义的 prvUSCI_A0_ISR()。 请注意,实现 prvUSCI_A0_ISR() 是为了强调移植并 演示中断使用的队列,并不是为了演示 高效或通用的中断服务程序! 在抢占式和协同式 RTOS 内核之间切换将 FreeRTOS/Demo/MSP430X_MSP430F5438_IAR/FreeRTOSConfig.h 内的定义 configUSE_PREEMPTION 设置为 1 即可使用抢占式机制,设置为 0 可 使用协同式调度。编译器选项与所有的端口一样,使用正确的编译器选项至关重要。 若要确保这一点, 最佳方法是基于提供的演示应用程序文件构建您的应用程序。内存分配演示应用程序项目中内置 Source/Portable/MemMang/heap_1.c,以提供 RTOS 内核所需的内存分配。 请参阅 API 文档的内存管理部分, 获取完整信息。Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|