简介[另请参阅演示 FreeRTOS 的无钩模式 如何用于最大限度地减少 在 STM32L 上运行的应用程序的功耗的项目]本页记录了适用于 STMicroelectronics 低功耗 STM32L152 微控制器的 FreeRTOS 演示应用程序 。 演示使用 IAR Embedded Workbench for ARM V6.10 来自 IAR Systems,并针对官方的 STM32L152-EVAL 评估板, 来自 STMicroelectronics(我们提供了说明, 如果您希望使用替代开发板)。 注意:如果项目构建失败,可能是使用的 IAR 嵌入式工作台版本过低。 如果构建失败, 那么也可能是项目文件(在无提示的情况下)已经损坏,因此需要 还原到原始状态,然后使用新版本的 IAR 生成项目。 6.10 版本预先安装了 FreeRTOS 状态查看器插件, 无需手动安装。
此页面上展示的项目演示的 FreeRTOS 功能该项目演示了以下 FreeRTOS 功能和技术:
重要提示!使用 STM32 ARM Cortex-M3 演示的注意事项使用此 RTOS 移植之前,请阅读以下所有要点。另请参阅常见问题我的应用程序 未运行,问题可能出在哪里? 源代码组织FreeRTOS 下载内容包含所有 FreeRTOS 移植的源代码,因此 包含的文件比此演示所需更多的文件。 请参阅本网站源代码组织部分, 了解关于已下载文件的说明 的信息。STM32L152 演示的 IAR 工作区文件名称是 RTOSDemo.eww, 位于 FreeRTOS/Demo/CORTEX_STM32L152_IAR 目录。
演示应用程序演示应用程序硬件设置演示应用程序包含中断驱动的 UART 测试。 这会产生两个 任务,包括一个发送任务和一个接收任务。 传输任务将字符传输到 USART3 上,接收任务接收 USART3 上的字符。 接收任务 应该接收传输任务传输的字符,因此为了实现正确操作, 必须将一个回环连接器连接到 STM32L152-EVAL 评估板上的 USART3/CN5 连接器上(引脚 2 和 3 必须 在 CN5 9Way 连接器上连在一起)。 并且 USART3 相关的跳线 JP5、JP7 和 JP8 必须设置为将引脚 2 和 3 短路(而不是设置为 将引脚 1 和 2 短路)。演示应用程序还使用内置在 STM32L152-EVAL 上的 所有四个 LED。 跳线 JP18 and JP19 必须被闭合(短路),LED3 和 LED4 才能 运行。 该端口的开发和测试使用 连接到目标硬件上的 CN8 的 J-LInk USB JTAG 接口。 评估硬件还提供 一个内置的 ST-Link 调试接口,可使用 标记为 ST-Link/CN11 的 USB 连接器访问。
构建和运行演示应用程序
功能此文档页面顶部列出了 FreeRTOS 功能 在 STM32L152 演示项目中的演示。 main.c 源文件中的注释 提供了有关如何实现和实现此功能的 实现和实施的。演示正常执行时,将观察到以下行为:
FreeRTOS 调试会话期间的屏幕截图。 经证明, FreeRTOS 状态查看器插件窗口可以在屏幕截图底部看到。 运行时间统计信息可以在终端 IO 窗口中看到。
RTOS配置和使用详情RTOS 端口特定配置这些演示的特定配置项目包含在 FreeRTOS/Demo/CORTEX_STM32L154_IAR/FreeRTOSConfig.h 中。 可以编辑 此文件中定义的常量,使其适合您的应用程序。 尤其是:
注意!请务必牢记 ARM Cortex-M3 核心使用的 数字越小表示中断优先级越高。 这一点 可能有悖直觉,容易混淆! 如果要将 中断设置为低优先级,请不要将其优先级指定为 0(或其他低数值), 因为这会导致该中断在系统中具有 最高优先级,并且如果这个优先级 高于 configMAX_SYSCALL_INTERRUPT_PRIORITY,可能会导致系统崩溃。 另外,请勿忘记 分配中断优先级,因为默认情况下,中断优先级为 0, 这可能导致其处于最高优先级。 ARM Cortex-M3 核心的最低优先级实际上是 255,但是不同的 Cortex-M3 供应商实现了不同数量的优先级, 并提供了期望以不同方式指定优先级的库函数。 例如, 在 STM32 上,您可以在 ST 驱动函数库调用中指定的最低优先级 实际上是 15,这是由常量 configLIBRARY_LOWEST_INTERRUPT_PRIORITY 定义的,它位于 FreeRTOSConfig.h。 可指定的最高优先级 始终为零。 我们还建议您确保将所有四个优先级位 都设置为抢占式优先级位。 要确保如此,可以将 "NVIC_PriorityGroup_4" 传递到 ST 库函数 NVIC_PriorityGroupConfig() 中。 在演示项目中,这是由函数 prvSetupHardware() 完成的, 它在 main.c 中定义。 每个端口将 #defines 'BaseType_t' 定义为对处理器来说 数据类型。 此移植将 BaseType_t 定义为长类型。 请注意,vPortEndScheduler() 尚未实现。 中断服务程序与大多数移植不同,导致上下文切换的中断服务程序 没有特殊要求,可根据编译器文档编写。 宏 portEND_SWITCHING_ISR() 可用于从 ISR 中请求上下文切换。请注意,portEND_SWITCHING_ISR() 会使中断保持启用。 此演示项目提供了 FreeRTOS 中断服务程序示例, 即在 main.c 中定义的 TIM6_IRQHandler() defined 和 在 serial.c 中定义的 USART3_IRQHandler()。 请注意,实现 USART3_IRQHandler() 是为了强调端口和 演示终端使用的队列,此演示的制作并不是为了 演示高效的中断服务程序! 在抢占式和协同式 RTOS 内核之间切换在 FreeRTOS/Demo/CORTEX_STM32L154_IAR/FreeRTOSConfig.h 中将 定义 configUSE_PREEMPTION 设置为 1 以使用抢占式, 或设置为 0 以使用协同式。编译器选项与所有的端口一样,使用正确的编译器选项至关重要。 若要确保这一点, 最佳方法是基于提供的演示应用程序文件构建您的应用程序。内存分配Source/Portable/MemMang/heap_2.c 位于 ARM Cortex-M3 演示应用程序项目中, 用于提供 RTOS 内核所需的内存分配。 请参阅 API 文档的内存管理部分, 获取完整信息。Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|