下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

内核
最新资讯
简化任何设备的身份验证云连接。
利用 CoAP 设计节能型云连接 IoT 解决方案。
11.0.0 版 FreeRTOS 内核简介:
FreeRTOS 路线图和代码贡献流程。
使用 FreeRTOS 实现 OPC-UA over TSN。

LM3S6965、LM3S2965、LM3S1968 以及 LM3S8962 演示
包括 uIP 嵌入式 Web 服务器示例

[嵌入式以太网示例]




此演示应用程序已经过以下评估套件测试:

LM3S6965 和 LM3S8962 演示创建了(除其他任务外)一个简单的 Web 服务器,可用于查看运行时信息, 并将数据写入 EVB-LM3S6965/EVB-LM3S8962 评估板上的 LED 和 OLED 显示屏。

提供了一个单独的文档页面,描述如何使用 Eclipse Workbench 和 OpenOCD 构建和调试此演示的 GCC 版本。 这两款工具都属于 开源软件。

此演示使用:

uIP 与 FreeRTOS.org 分开授权。 用户必须熟悉 uIP 许可

自此演示创建以来,FreeRTOS 已对 uIP 堆栈做了一些修改。 请参阅嵌入式以太网示例列表页面,获取更多详细信息。

LM3S2965 和 LM3S6965 用户注意事项:REV C 评估套件板上的显示部件号已更改。 如果使用的是 REV C 评估板,则:

  1. 在项目或 makefile 中,删除对 osram128x64x4.c 的引用,并将其替换为 rit128x96x4.c。 rit128x96x4.c 和 rit128x96x4.h 已在其他项目中使用过, 因此可在 FreeRTOS 下载中找到这两份文件。
  2. 在 main.c 中,在 vOLEDTask() 函数顶部的 case 语句中,确保 LM3S2965 和 LM3S6965 使用 rit128x96x4 驱动程序, 与在同一 case 语句内初始化的其他设备相同。

注意:如果项目构建失败,可能是使用的 IAR 嵌入式工作台版本过低。 如果构建失败, 那么也可能是项目文件(在无提示的情况下)已经损坏,因此需要 将其恢复至初始状态,然后才能使用新版本的 IAR 构建项目。


重要提示!使用 ARM Cortex-M3 Web 服务器演示的注意事项

使用此 RTOS 移植之前,请阅读以下所有要点。

  1. 源代码组织
  2. 演示应用程序
  3. RTOS 配置和使用详情
另请参阅常见问题:我的应用程序未运行,问题可能出在哪里?

源代码组织

请参阅 FreeRTOS 网站的源代码组织部分,获取 下载文件的描述和有关创建新项目的信息。

IAR 项目文件

  • LM3S6965、LM3S2965、LM3S1968 以及 LM3S8962 FreeRTOS 演示的 IAR 工作区文件名为 RTOSDemo.eww,位于 FreeRTOS/Demo/CORTEX_LM3Sxxx_IAR_Keil 目录中。

Keil uVision 项目文件

  • LM3S6965、LM3S2965、LM3S1968 以及 LM3S8962 FreeRTOS 演示的 Keil/ARM 项目文件名为 RTOSDemo.uv3,同样位于 FreeRTOS/Demo/CORTEX_LM3Sxxxx_IAR_Keil 目录中。


演示应用程序

LM3S6965/LM3S8962 演示应用程序设置

只有在 main.c 中将 mainINCLUDE_WEB_server 设置为 1 时,构建才会包含 Web 服务器。 如果不包含 Web 服务器, 可使用 IAR Embedded Workbench 的 KickStart 版本构建应用程序。

直接使用点对点(交叉)电缆,或使用标准以太网电缆通过集线器或交换机,将 EVB-LM3S6965 或 EVB-LM3S8962 开发板连接到运行 Web 浏览器的计算机上。 点对点连接时,原型板也允许使用标准以太网电缆, 但我没有尝试过这种配置。

演示使用的 IP 地址 由 FreeRTOS/Demo/CORTEX_LM3Sxxxx_IAR_Keil/uIP_Task.c 文件中的 uipIP_ADDR0 到 uipIP_ADDR3 常量设置。 运行 Web 浏览器的计算机使用的 IP 地址必须和原型板使用的 IP 地址相兼容。 为此,可以将二者 IP 地址中的前三个八位元组设置成相同的值。 例如,如果运行 Web 浏览器的计算机所用 IP 地址是 192.168.100.1,那么原型板的 IP 地址可以使用 192.168.100.2 到 192.168.100.254 范围内的任何地址 (任何网络上的现有地址除外)。

评估套件从其内部存储器中读取其 MAC 地址,无需手动配置。

此演示应用程序使用了原型板上内置的 LED 和 OLED,因此无需使用其他硬件设置。

EVB-LM3S6965/EVB-LM3S8962 通过单个微型 USB 连接器供电、编程以及调试。 第一次用 USB 连接评估板和 PC 时, 系统会提示您安装各种 USB 驱动器。 可 从 Luminary Micro CD 或 Luminary Micro 网站获取所需的 USB 驱动程序。


EVB-LM3S2965/EVB-LM3S1968 演示应用程序设置

请注意本页顶部关于选择正确显示驱动程序的注释。

LM3S2965 和 LM3S1968 演示不需要任何特定配置。


构建和执行演示应用程序

  1. 使用 IAR 开发工具

    1. 如上所述,设置所需的 IP 和 MAC 地址(仅限 LM3S6965 和 LM3S8962)。

    2. 在 Embedded Workbench IDE 中打开 FreeRTOS/Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.eww 项目 。

    3. 在 IDE 的 "Project" 菜单中选择 "Rebuild All"。 项目若构建成功,不会报错或出现警告。

    4. 在 IDE 的 "Project" 菜单中选择 "Debug"。 微控制器闪存将使用演示应用程序进行编程,并且调试器会在 main() 函数开始处中断。

    该项目包括内置在二进制数组中的位图。 这将导致二进制数组大小变大,并且在某些优化级别下, 构建大小将超过 Embedded Workbench Kickstart 版本的 32K 限制。 如出现该问题,则可通过从构建中排除位图来减少代码大小(方法:删除 main 中包含的头文件 bitmap.h, 并在同一文件中注释掉对 OSRAM128x64x4ImageDraw() 的调用)。

  2. 使用 Keil ARM 开发工具

    1. 如上所述,设置所需的 IP 和 MAC 地址(仅限 LM3S6965 和 LM3S8962)。

    2. 在 uVision IDE 中打开 FreeRTOS/Demo/CORTEX_LM3Sxxxx_IAR_Keil/RTOSDemo.uv2 项目 。

    3. 从 IDE 的 "Project" 菜单中选择 "Build Target"。 很遗憾, Keil 构建在编译 uIP 源时确实会产生一些警告。

    4. 在 "Flash" 菜单中选择 "Download"。 将对微控制器闪存进行编程,并开始调试会话。

    演示应用程序太大,无法使用 uVision 评估软件构建,因此需要许可。

    IAR 演示已由 Luminary Micro(非常感谢!)改编为与 Keil 开发工具一起使用,我无法亲自测试该移植。 FreeRTOS.org 移植 与用于现有 Keil/Cortex-M3 演示的移植相同。


功能

此演示应用程序创建了 20 个持久性任务,并定期动态创建和销毁另外 2 个任务。 这些任务主要包含标准 演示应用程序任务(有关个别任务的详细信息,请参阅演示应用程序部分)。

除了标准演示任务外,应用程序还创建了以下任务和测试:

  • 高优先级中断测试 [目前仅适用于 IAR 构建]

    使用一个由自由运行的定时器 生成的高频周期性中断,来演示 configKERNEL_INTERRUPT_PRIORITY 配置常数的使用。 中断 服务程序测量 每个中断之间发生的处理器时钟的数量 - 从而测量中断计时的抖动。 测得的最大抖动时间被锁定在 ulMaxJitter 变量中, 并通过“检查”任务显示在 OLED 显示屏上,如下所述。 快速中断 timertest.c 源文件中配置和处理快速中断。 这 演示了如何配置 RTOS 内核 才能不对优先级更高的中断处理造成影响。

    当在处理较低优先级中断过程中出现较高优先级中断时, ARM Cortex-M3 核心可以加快进入中断服务程序的速度(从而减少延迟), 最多 8 个周期。 因此,测得的抖动时间应 不超过 8 个时钟周期。

  • OLED 任务

    OLED 任务是一项“网关守卫”任务。 这是唯一 被允许直接访问显示器的任务。 其他任务要向 OLED 写入消息,需将消息发送到一条队列中,然后再向 OLED 任务发送该队列,而不是 直接访问 OLED。 OLED 任务只在队列中阻塞, 等待消息,在消息到达时唤醒并显示消息。

  • 检查函数——从滴答钩子调用

    每 5 秒执行一次。 其主要功能是 检查所有标准演示任务是否仍在运行。 如果 在演示任务中发现任何意外行为,检查任务将 向 OLED 写入错误(通过 OLED 任务)。 如果所有演示任务 都执行其预期行为,则检查任务会将 PASS 和最大抖动时间一起写入 OLED(通过 OLED 任务), 如上所述。

  • uIP 任务(仅限 LM3S6965 和 LM3S8962)

    该任务负责处理 uIP 堆栈。 所有 TCP/IP 处理 都在此任务中进行。

如果演示应用程序正确执行,其表现如下:

  • “检查”函数将每 5 秒向显示器写入 'PASS' 和抖动时间(以纳秒为单位)。

  • 目标硬件将向标准 Web 浏览器提供下述网页(仅限 LM3S6965 和 LM3S8962)。 要连接到目标,请执行下列操作:

    1. 在连接的计算机上打开浏览器。
    2. 先在浏览器地址栏中输入 "HTTP://",再输入目标 IP 地址。


      在浏览器中输入 IP 地址
      (当然,根据您的系统,使用正确的 IP 地址)


提供的网页(仅限 LM3S6965 和 LM3S8962)

每个提供的页面顶部包含一个菜单,其中含有指向其他每个页面的链接。


提供的 RTOS 统计页面

RTOS 统计页面提供了系统内每个任务状态的运行时信息,包括堆栈高水位线(任务开始执行后, 可随时在此处获取最小数量的堆栈)。 该页面大约每 2 秒重新加载一次,具体取决于网络负载。

此页面分三个部分传输:HTML 标头和菜单、动态生成的内容以及 HTML 页脚。 这样, 页面的加载速度相对较快。 可以通过一次性传输整个页面来进一步优化加载速度。

有时,连续重新加载 RTOS 统计页面会导致无法从该页面离开。


提供的 IO 页面

IO 页面提供了一个简单的接口,可以将数据发送到开发板上的 LED 和 OLED。

复选框可以设置和查询用户 LED 的状态。 文本框可用于向 OLED 写入消息, 但不会查询当前显示的文本。 点击 "Update IO" 按钮可将变更发送到目标硬件。

TCP 统计信息和连接页面显示运行时网络信息。 请注意,这些页面单独传输每行数据,因此加载速度较慢。 这演示了如何通过牺牲已实现的数据吞吐量来利用小型传输缓冲区优化内存使用。



RTOS 配置和使用详情


RTOS 移植特定配置

这些演示的特定配置项目位于 FreeRTOS/Demo/CORTEX_LM3Sxxxx_IAR_Keil/FreeRTOSConfig.h。 可根据 在本文件中定义的常量,以适配您的应用程序。 特别是-
  • configTICK_RATE_HZ

    可通过该常量设置 RTOS tick 的频率。 提供的数值 1000 Hz 可用于 测试 RTOS 内核功能,但这超过了大部分应用程序的频率要求。 降低此值可提高效率。

  • configKERNEL_INTERRUPT_PRIORITY 和 configMAX_SYSCALL_INTERRUPT_PRIORITY

    请 参阅 RTOS 内核配置文档,获取这些配置常量的完整信息。

注意:请记住 ARM Cortex-M3 核心使用低数值数字表示高 优先级中断,这似乎有悖直觉,而且很容易忘记! 如果您希望将中断分配为低优先级,请不要将中断的 优先级指定为 0(或其他较小数值),因为这可能会导致中断实际上在系统中具有最高优先级 - 因此,如果该优先级 高于 configMAX_SYSCALL_INTERRUPT_PRIORITY,则可能会导致系统崩溃。

ARM Cortex-M3 核心的最低优先级实际上是 255,然而,不同的 ARM Cortex-M3 供应商采用了不同数量的优先位, 并提供了优先级指定方式不同的库函数。 请使用提供的示例作为参考。

每个移植 #defines 'BaseType_t' 等于该处理器的最有效数据类型。 本移植将 BaseType_t 定义为长整型。

请注意,vPortEndScheduler() 尚未实现。


中断服务程序

在演示应用程序中,向量表保存在闪存。

与大多数移植不同,导致上下文切换的中断服务程序没有特殊要求,可以根据编译器文档编写。 宏 portEND_SWITCHING_ISR() 可用于从 ISR 内请求上下文切换。

请注意,portEND_SWITCHING_ISR() 将启用中断。


在抢占式和协作式 RTOS 内核之间切换

FreeRTOS/Demo/CORTEX_LM3Sxxxx_IAR_Keil/FreeRTOSConfig.h 内的定义 configUSE_PREMPTION 设置为 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.