简介这个简单的演示项目在 STM32 Discovery 板上运行, 该板装有 STM32F100RB Cortex-M3 微控制器,由 STMicroelectronics 提供。其低成本使得 Discovery 板成为理想的评估平台,但 8K 的可用 RAM 也意味着可演示的 FreeRTOS 内核功能数量 有限。 因此,这个简单的演示仅积极 演示了任务、队列、软件定时器和中断功能。 该演示还 配置为包括 malloc 失败、空闲和堆栈溢出挂钩 函数。 FreeRTOS 下载内容包括其他功能更全面的演示应用程序, 适用于 STM32 微控制器系列中的大型部件。 演示已经过预先配置,可使用免费版本的 Atollic TrueStudio for STM32 基于 Eclipse 的 IDE,以及 FreeRTOS GCC 移植。
重要提示!使用 STM32F100 ARM Cortex-M3 演示的注意事项使用此 RTOS 移植之前,请阅读以下所有要点。另请参阅常见问题我的应用程序 未运行,问题可能出在哪里? 源代码组织FreeRTOS 下载内容包含所有 FreeRTOS 移植的源代码,因此 包含的文件比此演示所需更多的文件。 请参阅本网站源代码组织部分, 了解关于已下载文件的说明 和新项目创建的信息。适用于 FreeRTOS STM32 Discovery 板演示的 TrueStudio 项目位于 FreeRTOS/Demo/CORTEX_STM32F100_Atollic 目录下。 此项目 应该导入到 TrueStudio 工作区。下文 准备 Eclipse 项目部分 描述了关于设置演示项目目录, 以及将演示项目导入到 TrueStudio 中的重要信息。
演示应用程序演示应用程序硬件设置演示使用的 LED 和按钮均集成于 STM32 Discovery 主板硬件上。 因此,无需进行硬件设置。准备 TrueStudio (Eclipse) 项目目录Eclipse 项目既可以是标准 makefile 项目,也可以是托管 make 项目。 STM32F100 项目使用托管 make 项目。 因此意味着 以下两种情况:
CreateProjectDirectoryStructure.bat 必须在 TrueStudio 项目导入到 Eclipse 工作区之前执行。 CreateProjectDirectoryStructure.bat 不能 在 TrueStudio Eclipse IDE 中执行。
将演示应用程序项目导入 TrueStudio Eclipse 工作区要将 STM32 TrusStudio 项目导入现有或新的 Eclipse 工作区:
构建和运行演示应用程序
用于创建调试启动配置的对话框,在按下 "New Launch Configuration" 速度按钮(红色突出显示部分)后出现。
功能
RTOS 配置和使用详情RTOS 移植特定配置这些演示的特定配置项位于 FreeRTOS/Demo/CORTEX_STM32F100_Atollic/Simple_Demo_Source/FreeRTOSConfig.h 中。 您可 编辑 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() 将启用中断。 此演示项目提供了中断服务程序示例, 即 main.c 中定义的 EXTI0_IRQHandler()。 请注意,以下行包括在 FreeRTOSConfig.h 中: #define vPortSVCHandler SVC_Handler #define xPortPendSVHandler PendSV_Handler #define xPortSysTickHandler SysTick_Handler这些定义将 FreeRTOS 内核中断处理程序函数名映射到 CMSIS 中断处理程序函数名上;如此一来,无需任何修改, 就可以使用 Atollic 提供的链接器脚本和启动文件。 在抢占式和协同式 RTOS 内核之间切换将 FreeRTOS/Demo/CORTEX_STM32F100_Atollic/Simple_Demo_Source/FreeRTOSConfig.h 内的定义 configUSE_PREEMPTION 设置为 1 即可使用抢占式机制,或设置为 0 即可使用协同式机制。内存分配Source/Portable/MemMang/heap_1.c 包含在 ARM Cortex-M3 演示应用程序项目中, 用于提供 RTOS 内核所需的内存分配。 请参阅 API 文档的内存管理部分, 获取完整信息。Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|