本页记录的演示已被弃用, 因为它已被使用更高硬件和工具版本的演示所取代。
简介本页记录了 MSP430F5438 微控制器(带有 MSP430X 内核)的 FreeRTOS 演示应用程序 (该控制器由 Texas Instruments 提供)。 该演示使用 MSP430 Code Composer Studio IDE 和编译器,面向 TI 的官方 MSP-EXP430F5438 实验板(如果您希望使用替代开发板,我们也提供了说明 )。移植和演示项目使用“大”和“小”数据模型以及“大”和“小”代码模型进行开发和测试。
此演示项目演示的 FreeRTOS 功能该项目演示了以下 FreeRTOS 功能和技术:
重要!使用 MSP430X CCStudio 4 演示的说明使用此 RTOS 端口之前,请阅读以下所有要点。另请参阅常见问题我的应用程序 未运行,问题可能出在哪里? 源代码组织FreeRTOS 下载内容包含所有 FreeRTOS 移植的源代码,因此 包含的文件比此演示所需更多的文件。 请参阅本网站源代码组织部分, 了解关于已下载文件的说明 的相关信息。MSP430F5438 演示的 CCS 项目文件位于 FreeRTOS/Demo/MSP430X_MSP430F5438_CCS4 目录中。 此项目是 应导入 CCS 工作区的项目。 以下准备 Eclipse 项目 部分包含有关设置演示项目目录 以及将演示项目导入 Code Composer Studio 的重要信息。
演示应用程序演示应用程序硬件设置演示应用程序包含中断驱动的 UART 测试。 这会产生两个 任务,包括一个发送任务和一个接收任务。 传输任务将字符发送到 UCA1 上,然后接收任务在同一个 UCA1 外围设备上接收字符。 接收任务 接收任务期望接收发送任务发送的字符,但由于 没有外部 9 路连接器,硬件内部配置为使用 环回模式。 因此,与其他 FreeRTOS 演示不同,无需 将外部环回连接器安装到 UART 即可进行 COM 端口测试。请注意,UART 中断服务程序的实现是为了演示从 中断服务程序内部使用队列。 该示例无法 高效中断实现。 真正的应用程序应该 使用 DMA。 或至少传送和接收可使用 简单的 RAM 环形缓冲区,并在接收或传送完整消息时 使用信号量与任务同步。 该移植使用 Texas Instruments MSP-FET430UIF USB 调试接口 进行开发和测试。 准备 CCS (Eclipse) 项目目录Eclipse 项目既可以是标准 makefile 项目,也可以是托管 make 项目。 MSP430X CCS4 项目使用托管 make 项目。 因此意味着 以下两种情况:
CreateProjectDirectoryStructure.bat 必须在将 Code Composer Studio 项目导入到 Eclipse 工作区之前执行。 CreateProjectDirectoryStructure.bat 不能从 Code Composer Studio Eclipse IDE 内部执行。
将演示应用程序项目导入 CCS Eclipse 工作区要将 MSP430X CCS 项目导入现有或新的 Eclipse 工作区:
构建和运行演示应用程序
功能此网页顶部列出了 MSP430X5438 演示项目演示的 FreeRTOS 功能。 main.c 源文件中包含的注释 提供了有关如何实现和实现此功能的 更多信息。演示正确执行时,将观察到以下行为:
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_CCS4/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_CCS4/FreeRTOSConfig.h 内的定义 configUSE_PREEMPTION 设置为 1 即可使用抢占式内核,设置为 0 可 使用协同式内核。编译器选项与所有的端口一样,使用正确的编译器选项至关重要。 若要确保这一点, 最佳方法是基于提供的演示应用程序文件构建您的应用程序。内存分配演示应用程序项目中内置 Source/Portable/MemMang/heap_2.c, 以提供 RTOS 内核所需的内存分配。 请参阅 API 文档的内存管理部分, 获取完整信息。Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|