该移植是用 DK-LM3S316 开发套件开发的。 LM3S316 是一款低成本、低引脚数的设备。 它的 芯片上有 4K 字节的 RAM 和 16K 字节的 ROM。 我们故意限制了演示 应用程序的代码大小,以确保使用 IAR 工具中代码大小受限的 KickStart 版本构建此演示应用。 IAR ARM Cortex-M3 演示依赖于一份需从 FreeRTOS.org 单独授权的驱动程序库文件。 适用于此库的许可的完整副本 包含在 EULA.txt 文件中,该文件位于 FreeRTOS 下载中的 Demo/CORTEX_LM3S316_IAR/hw_include 目录下。 目前有四种 FreeRTOS 移植适用于基于 Luminary Micro Stellaris ARM Cortex-M3 的微控制器。 一是使用 Sourcery G++ (GCC) 工具的移植,二是使用 ARM Keil 工具的移植,三是针对 Rowley CrossWorks 的移植, 四是本页面上展示的使用 IAR Embedded Workbench 工具链的移植。 注意:如果使用 IAR 工具构建项目失败,则可能是使用的 IAR Embedded Workbench 版本过低造成的。 如果构建失败, 那么也可能是项目文件(在无提示的情况下)已经损坏,因此需要 将其恢复至初始状态,然后才能使用新版本的 IAR 构建项目。
重要提示!使用 ARM Cortex-M3 移植的注意事项IAR使用此 RTOS 移植之前,请阅读以下所有要点。另请参阅常见问题:我的应用程序未运行,问题可能出在哪里? 源代码组织FreeRTOS 下载文件包含所有 FreeRTOS 移植的源代码,因此包含的文件比此演示使用的文件更多。 请参阅源代码组织部分,查看 下载文件的描述和有关创建新项目的信息。Luminary Micro 移植的 IAR 工作区位于 FreeRTOS/Demo/CORTEX_LM3S316_IAR 目录中,称为 RTOSDemo.eww。
演示应用程序FreeRTOS 源代码下载包含针对 IAR 移植的预配置演示应用程序。 该应用演示了完全抢占式任务和协程——创建了 8 个协程和 5 个任务(包括空闲任务)。
演示应用程序硬件设置大多数 DK-LM3S316 跳线可以保持在默认位置。 为保证 ADC 能够正确读取光传感器,请确保跳线 0 也处于 ADC 连接器 JP2 上的相应位置。此演示应用程序包括一个中断驱动的 UART 测试,其中一个协程传输字符,一个任务接收这些字符。 为了使该功能正确运行, 必须将环回连接器安装到 DK-LM3S316 目标板的 SER0 连接器上 (9 路连接器上的引脚 2 和 3 必须连接在一起)。 演示应用程序使用原型板中内置的 LED,因此不需要其他硬件设置。 使用 J-Link JTAG 接口连接主机 PC 与目标端。
功能有关演示功能的详细说明,请参阅 Demo/CORTEX_LM3S316_IAR/main.c 顶部的注释。如果演示应用程序正确执行,其表现如下:
构建和执行演示应用程序要构建应用程序,只需在 Embedded Workbench IDE 中打开 RTOSDemo.eww,然后从 "Project" 菜单中选择 "Rebuild all"。 如需下载并执行此演示,请进行以下步骤:
配置和用法详情RTOS 移植特定配置这些演示的特定配置项目位于 FreeRTOS/Demo/CORTEX_LM3S316_IAR/FreeRTOSConfig.h。 可以编辑 在本文件中定义的常量,以适配您的应用程序。 特别是-
ARM Cortex-M3 核心的最低优先级实际上是 255,然而,不同的 ARM Cortex-M3 供应商采用了不同数量的优先位, 并提供了优先级指定方式不同的库函数。 请使用提供的示例作为参考。 每个移植 #defines 'BaseType_t' 等于该处理器的最有效数据类型。 本移植将 BaseType_t 定义为长整型。 请注意,vPortEndScheduler() 尚未实现。 中断服务程序中断向量表包含在 FreeRTOS/Demo/CORTEX_LM3S316_IAR/hw_include/startup.c 中,可根据需要填充。 在演示应用程序中,向量表保存在闪存。与大多数移植不同,导致上下文切换的中断服务程序没有特殊要求,可以根据编译器文档编写。 宏 portEND_SWITCHING_ISR() 可用于从 ISR 内请求上下文切换。 commtest.c 中定义的被称为 vUART_ISR() 的 UART ISR 演示了这种机制。 请注意,portEND_SWITCHING_ISR() 将启用中断。 在抢占式和协同式 RTOS 内核之间切换将 FreeRTOS/Demo/CORTEX_LM3S316_IAR/FreeRTOSConfig.h 内的定义 configUSE_PREEMPTION 设置为 1,可使用抢占式调度; 设置为 0,可使用协同式调度。 如果 configIDLE_SHOULD_YIELD 设置为 1,则仅当 configUSE_PREEMPTION 设置为 0 时,演示应用程序才会正确执行 。编译器选项与所有的端口一样,使用正确的编译器选项至关重要。 若要确保这一点, 最佳方法是基于提供的演示应用程序文件构建您的应用程序。内存分配Source/Portable/MemMang/heap_1.c 包含在 ARM Cortex-M3 演示应用程序项目中, 用于提供 RTOS 内核所需的内存分配。 请参阅 API 文档的内存管理部分, 以获取完整信息。串行端口驱动器此外还需注意的是,编写串行驱动程序是为了测试部分实时内核功能,并不是 用于表示优化过的解决方案。
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|