下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

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

FreeRTOS Stellaris Web 服务器演示
在完全
开源的开发环境中使用 Eclipse、OpenOCD 和 GCC

[嵌入式以太网示例]


此页面所描述的演示使用……

…… 为 Luminary Micro 提供的系列 ARM Cortex-M3 Stellaris 评估套件创建一个简单的 Web 服务器示例。

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

在以下评估套件上进行了测试(仅 LM3S6965 和 LM3S8962 支持以太网):

Eclipse Europa 版本包含有助于交叉开发的增强功能。

FreeRTOS zip 文件包含设置开发环境所需的一切,但不包含 Eclipse 和 GCC 工具本身。 请仔细按照这些说明正确安装和配置 Eclipse, 以用于此演示应用程序。

Luminary Micro 评估套件可以使用 Micro USB 数据线直接连接到主机上,无需使用单独的 JTAG 接口设备。 该 USB 连接用于为微控制器供电、编程和调试。

uIP 和 OpenOCD 需从 FreeRTOS.org 单独授权。 用户必须熟悉相应的许可证。 (OpenOCD 根据 GNU GPL 授予许可)。

虽然所使用的工具均为跨平台工具,但我仅在 Windows 主机上测试了 ARM Cortex-M3/Eclipse 构建。

升级到 FreeRTOS V5.0.3: FreeRTOS V5.0.3 为 ARM Cortex-M3 移植引入了 configMAX_SYSCALL_INTERRUPT_PRIORITY 配置选项。 请参阅 RTOS 内核配置文档以获取有关此功能的完整信息。

升级到 FreeRTOS V4.8.0:在 V4.8.0 之前,FreeRTOS 内核未使用 SVCall 中断。 从 V4.8.0 开始才使用 SVCall 中断。 因此,要将旧项目升级到 V4.8.0 标准,需要稍微编辑一下启动代码。 要执行此操作,只需 将 vPortSVCHandler () 安装到中断向量表(包含在启动源文件中)内的 SVCall 位置。 包含在 FreeRTOS 下载中包含的演示项目已更新,因此可以作为示例。

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 语句内初始化的其他设备相同。


重要提示!Stellaris Web 服务器演示使用说明

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

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

源代码组织

Eclipse Stellaris 演示的 Eclipse 工作区位于 FreeRTOS/Demo/CORTEX_LM3Sxxxx_Eclipse 目录中。 在 Eclipse 启动过程中提示选择工作区位置时请选择此目录。 请务必阅读 Eclipse 的安装和配置说明, 然后再构建项目。

下载的 FreeRTOS zip 文件包含所有移植文件和演示应用程序项目文件。 因此其包含的文件 远多于此演示使用的文件。 请参阅源代码组织部分,获取 下载文件的描述和有关创建新项目的信息。


演示应用程序

演示应用程序设置

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

使用点对点(交叉)电缆直接将 Stellaris 评估板连接到运行网络浏览器的计算机, Web 浏览器的计算机上。 点对点连接时,原型板也允许使用标准以太网电缆, 但我没有尝试过这种配置。

演示使用的 IP 地址是通过 FreeRTOS/Demo/CORTEX_LM3Sxxxx_Eclipse/RTOSDemo/webserver/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 显示器,因此不需要其他硬件设置。


构建演示应用程序

再次提醒,请参阅 Eclipse 安装和配置说明, 以了解更多详细信息。
  1. 确保已安装 ARM EABI Lite 版本的 Code Sourcery G++ 开发工具, 并且已将 [install path]/CodeSourcery/Sourcery G++ Lite/bin 目录纳入 PATH 环境变量中。
  2. 从 Eclipse Workbench 中打开 FreeRTOS/Demo/CORTEX_LM3Sxxxx_Eclipse Eclipse 工作区。
  3. 确保已配置 FreeRTOS_ROOT 变量。
  4. 按 F7(或从 "Project" 菜单中选择 "Build All")以构建演示应用程序。


运行演示应用程序

再次提醒,请参阅 Eclipse 安装和配置说明, 以了解更多详细信息。
  1. 使用 USB 线将 Stellaris 评估套件连接到您的主机。 如果这是首次连接套件,系统会提示您 安装 3 个 USB 驱动程序。 套件随附的 Luminary Micro CD 中包含了正确的驱动程序,或者也可以从 Luminary Micro 网站下载。
  2. 确保以太网电缆已按上文所述完成连接。
  3. 从 "Run | External Tools" 菜单中选择 "OpenOCD Programmer",然后等待编程完成。
之后,如果您希望开始调试会话,请执行以下步骤:
  1. 从 "Run | External Tools" 菜单中选择 "OpenOCD Server"。
  2. 切换到调试视角。
  3. 在调试窗格中选择可执行的 OpenOCD 服务器。
  4. 点击 "Debug RTOSDemo" 加速按钮(带有绿色小虫图标的按钮)。


功能

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

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

  • 高优先级中断测试

    使用一个由自由运行的定时器 生成的高频周期性中断,来演示 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_Eclipse/RTOSDemo/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_Eclipse/RTOSDemo/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.