此 STR750 ARM7 演示应用程序已预配置为在 STR750 EVAL 评估板上执行, 该评估板来自 ST Microelectronics(如果您希望使用替代开发板,我们也提供了说明)。 本页介绍的 RTOS 移植和演示应用程序 需要 GNUARM GCC 工具链的 Raisonance RIDE 接口。 RLink In-circuit 调试器和程序员 直接从 RIDE IDE 对微控制器闪存进行编程。 使用 ST 提供的处理器外围库来提高开发速度。 重要提示!关于使用 STR750 GCC ARM RTOS 移植的注意事项使用此 RTOS 移植之前,请阅读以下所有要点。另请参阅常见问题:我的应用程序未运行,问题可能出在哪里? 源代码组织FreeRTOS 下载包含所有 FreeRTOS 移植的源代码,因此包含的文件 比 STR750 移植此演示使用的文件更多。 请参阅源代码组织章节获取目录结构的描述以及 创建新项目的信息。STR75x GCC ARM7 移植包含的演示 RIDE 项目称为 RTOSDemo.prj,可在 Demo/ARM7_STR75x_GCC 目录中找到。 此文件应直接从 RIDE IDE 中打开。 Demo/ARM7_STR75x_GCC/ST library 目录包含演示应用程序使用的 ST 外围设备库 组件。 演示应用程序演示应用程序配置为创建 22 个完全抢占式任务。演示应用程序硬件设置在使用 RLink JTAG 接口之前,必须先从 STR75x-EVAL 评估板上移除 JP13。标准“ComTest”任务在 UART0 上发送和接收字符。 一个任务发送的字符 需要另一个任务来接收,如果任何字符被遗漏或接收顺序错误,则标记错误情况。 评估板的 UART 0 上 需要一个环回连接器,才能使此功能正常工作(只需在标记为 CN4 的串行端口连接器上 将引脚 2 和 3 连接在一起即可)。 演示应用程序使用内置在评估板上的 LED ,因此不需要特定的硬件设置。
RIDE 项目RIDE 演示应用程序项目 该项目包含 4 个文件夹:
构建演示应用程序 - THUMB 模式FreeRTOS 下载中的项目已预配置为使用 THUMB 模式。 要使用 THUMB 模式构建项目,只需从 RIDE "Project" 菜单中 选择 "Build all" 。这两个文件 serialISR.c 和 portISR.c 包含中断服务程序,因此必须编译为 ARM 模式。 所有其他文件将编译为 THUMB 模式。 重要提示: 为此,应用于 serialISR.c 和 portISR.c 的项目选项不同于应用于所有其他文件的项目选项。 如果编辑全局项目项目选项(使用 “选项” | “项目”菜单选项),则应用于这两个文件的特殊选项将丢失,必须手动重置。 如果不这样做, 项目将无法成功构建。 为确保将 portISR.c 和 serialISR.c 编译为 ARM 模式:
构建演示应用程序 - ARM 模式以下对项目选项的修改将导致所有文件使用 ARM 模式:
对 STR750 FLASH 进行编程并启动调试器
功能演示应用程序创建 10 个标准演示任务,一个 "check" 任务、一个 "print" 任务 以及 "idle" 任务。"print" 任务是一项“网关守卫”任务。 也就是说,这是唯一应该直接访问 LCD 的任务,因此始终保证独占 (一致性)访问。 "print" 任务只是阻塞队列以等待来自希望在 LCD 上显示文本的其他任务的消息。 到达的消息将解除阻塞任务,该任务将消息内容写入 LCD,然后再次阻塞。 尽管在此应用程序中实际上只有一个生成显示文本的任务, 但此功能仅用于演示目的。 "check" 任务负责确保所有标准演示任务都按预期执行。 该任务通常每 3 秒执行一次, 但其在系统内拥有最高优先级,因此保证能够获得执行时间。 "check" 任务发现的任何错误都会被锁定, 直到处理器重置。 "check" 任务在每个执行周期结束时会向 "print" 任务发送通过或失败的消息,以在 LCD 上显示。 如果演示应用程序正确执行,其表现如下:
配置和用法详情RTOS 移植特定配置此移植的特定配置项目位于 Demo/ARM7_STR75x_GCC/FreeRTOSConfig.h 中。 您可以根据应用程序的需要, 以适合您的应用程序。 特别是,configTICK_RATE_HZ 定义用于 设置 RTOS tick 的频率。 所提供的数值 1000 Hz 可用于测试 RTOS 内核功能,但该值 高于大多数应用程序要求的频率。 降低该值将会提高效率。每个移植都会将 "BaseType_t" 定义为该处理器的最有效数据类型。 本移植将 BaseType_t 定义为长整型。 请注意,vPortEndScheduler() 尚未实现。 中断服务程序STR75x 演示在调用用户定义的中断服务程序 C 代码之前自动保存和恢复任务上下文。 这 与 STR71x 移植相反,后者通过 FreeRTOS 提供的宏在 C 代码中保存和恢复 上下文。 这种替代方法用于演示。 从用户的角度来看,其优点是简化了语法, 但缺点是不执行上下文切换的中断的执行时间稍长。
中断服务程序必须编写为 ARM 模式 C 函数。
例如:
通常情况下,您需要中断服务程序来引起上下文切换。 例如,正在被接收的串行端口字符
可能会唤醒在等待该字符时被阻塞的高优先级任务。 如果 ISR 中断了一个优先级较低的任务,
则其应立即返回到已被唤醒的任务。 只需在中断服务程序中调用宏 END_SWITCHING_ISR()
来执行,如下所示:
有关完整示例,请参阅 Demo/ARM7_STR75x_GCC/serial/serialISR.c 中的函数 vSerialISR()。 用户定义的中断程序必须替换 Demo/ARM7_STR75x_GCC/SystemFiles/ctr0_str75x_FreeRTOS.s 中 ST 提供的存根。
在抢占式和协同式 RTOS 内核之间切换将 Demo/ARM7_STR75x_GCC/FreeRTOSConfig.h 中的定义 configUSE_PREMPTION 设置为 1,可使用抢占式调度; 设置为 0 则使用协同式机制。编译器选项与所有的端口一样,使用正确的编译器选项至关重要。 确保这一点的最佳方法是,基于 提供的演示应用程序项目文件构建您的应用程序——就如 源代码组织部分中所述。执行上下文RTOS 调度器以特权模式执行,任务以系统模式执行。注意!: 启动 RTOS 调度器时(vTaskStartScheduler 被调用),处理器必须处于监管器模式 。 FreeRTOS 下载中包含的演示应用程序, 会在 main 函数调用前切换到监管器模式。 如果您没有使用 这些演示应用程序,那么在调用 vTaskStartScheduler 函数之前,请确保处理器已进入特权模式。 使用 Demo/ARM7_STR75x_GCC/SystemFiles/STR75x_COMMON_FreeRTOS.ld 中定义的常量配置每个必要操作模式的堆栈大小。 无需 为用户/系统模式配置堆栈。 SWI 指令由实时内核使用,不能被应用程序代码使用。
内存分配Source/Portable/MemMang/heap_1.c 包含在 ARM7 演示应用程序项目中,用来为实时内核分配 所需的内存。 请参阅 API 文档的内存管理部分 以获取完整信息。串行端口驱动器此外还需注意的是,编写串行驱动程序是为了测试部分实时内核功能,并不是 代表优化的解决方案。 特别是,它们并不使用 FIFO。
滴答中断时间基准 (TB) 外围设备用于生成滴答中断。
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|