下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

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

3LPC1768 ARM Cortex-M3 IAR 演示
包括嵌入式网络服务器和 USB 示例
[嵌入式以太网示例]




此页面提供了 IAR 网络服务器和 USB 演示,该演示预配置为 在 KSK-LPC1768-PL Kickstart 开发套件中随附的评估板 上运行。 评估板安装有 LPC1768 来自 NXP Semiconductors 的 Cortex-M3 微控制器。

此演示使用:

  • FreeRTOS IAR ARM Cortex-M3 移植。
  • IAR Embedded Workbench V5.40。
  • Adam Dunkels 开源的 uIP 嵌入式 TCP/IP 堆栈,用于实现运行 CGI 脚本的网络服务器。
  • Bertrik Sikkens 开源的 LPCUSB USB 堆栈,用于实现 CDC 类回显服务器。
uIP 和 LPCUSB 与 FreeRTOS 分开授权。 用户必须熟悉 uIPLPCUSB 许可。

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

FreeRTOS ARM Cortex-M3 移植包含完整的中断嵌套模型。必须按照 自定义页面上的说明设置中断优先级才能正确操作。

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


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

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

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

源代码组织

LPC1768 演示的 IAR 嵌入式工作台的工作区称为 RTOSDemo.eww,位于 FreeRTOS/Demo/CORTEX_LPC1768_IAR 目录。

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


演示应用程序

网络服务器配置

使用点对点(交叉)电缆直接将评估板连接到运行网络浏览器的计算机, 或使用标准以太网电缆通过以太网交换机连接。

演示使用的 IP 地址由 常量 configIP_ADDR0 在文件 FreeRTOS/Demo/CORTEX_LPC1768_IAR/FreeRTOSConfig.h 中设置为 configIP_ADDR3。 MAC 地址和网络掩码配置 配置在同一头文件中。

网络浏览器计算机和评估板使用的 IP 地址必须兼容。 为此,可以将二者 IP 地址中的前三个八位字节设置成相同的值。 例如,如果运行 Web 浏览器的计算机的 IP 地址是 192.168.100.1,那么开发板的 IP 地址可以使用 192.168.100.2 到 192.168.100.254 范围内的任何地址 (网络中已存在的地址除外)。


构建和执行演示应用程序

  1. 从 Embedded Workbench IDE 中打开 FreeRTOS/Demo/CORTEX_LPC1768_IAR

  2. Embedded Workbench 的启动版本只能与编译的 32 KB 字节和以下的二进制图像一起使用-如果使用 Kickstart 版本, 则在编译前必须将编译器优化设置为“中等”。

  3. 使用 J-Link USB JTAG 接口将评估板连接到主机。

  4. 从 "Project" 菜单中选择 "Download and Debug",在编程至 LPC1768 闪存之前, 演示程序应该在没有错误或警告的情况下构建。 调试器会在 main() 开始时中断。


功能

演示应用程序在启动 RTOS 调度程序之前创建 34 个任务。任务主要 是标准演示任务(请参阅演示应用程序 章节了解各个任务的详细信息)。各项任务的存在旨在示明如何使用 FreeRTOS API ,并 仅测试 FreeRTOS 端口,没有其他有效用途。

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

  • 检查函数 - 从 tick hook 调用

    它每 5 秒钟执行一次。其主要功能是检查所有 标准演示任务是否仍在运行。检查函数维护一个状态字符串, 可在 uIP TCP/IP Web 服务器提供的“任务统计”页面上查看。

  • uIP 任务

    它是处理 uIP 堆栈的任务。 所有的 TCP/IP 处理都是在该任务中进行。

  • USB 任务

    它是处理 USB 堆栈的任务。 USB 设备将枚举为 CDC 设备。 USB 任务只是简单地回显接收的字符 并默认将字符偏移一位。 因此,如果接收到 'A',则回显 'B'。 如果接收到 'x',则回显 'y',等等。

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

  • 用户 LED 1 由基本的“闪光”任务控制,该任务只需每秒切换一次 LED。

  • 评估板的 USB 设备端口将被列举为 CDC 类设备。 要使用 USB 端口(假设是 Windows 主机):

    1. 使用评估板的 USB 设备端口将 LPC1768 连接到主机(确保跳线设置正确,以便设备操作,跳线设置请参阅 板的底部)。
    2. 主机应识别新的 USB 连接,并提示合适的 .inf 文件的位置。 选择选项 手动选择 .inf 文件位置,然后浏览到 usbser.inf, 位于 FreeRTOS/Demo/CORTEX_LPC1768_IAR 目录中。 假设 usbser.sys 在您的主机上可用, CDC 设备将被分配一个 COM 端口号。 Windows 设备管理器可用于确定实际分配的号码。
    3. 打开一个哑终端(如超级终端)并选择枚举的 COM 端口号。 其他参数,如波特率和流控制 设置不是必需的,可以保留为默认值。
    4. 在终端窗口中输入 'A',如果一切正常,应该看到 'B' 被回显。

    请注意,演示应用程序使用队列在 USB 中断服务程序和 USB 任务之间传递每个字符。 对于慢速回显服务器,这种方法很便捷, 但如果要传输大量数据,效率非常低。

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

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


      在 Web 浏览器中输入 IP 地址
      (使用正确的系统 IP 地址)
请注意,由于 LCD 驱动程序仅能够与 Keil 编译器一起使用,因此未使用 LCD。


提供的网页

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


提供的 RTOS 统计信息页面显示了系统中每个任务的状态信息。



提供的运行时统计信息页面显示了每个任务的处理器利用率。



提供的 IO 页面

IO 页面提供了一个简单的接口,可以将数据发送到 LED。 通过复选框可以设置和查询 用户 LED 2 的状态。 点击 "Update IO" 按钮可将变更发送到目标硬件。

TCP 统计信息和连接页面显示运行时网络信息。



RTOS 配置和使用详情


RTOS 移植特定配置

这些演示的特定配置项目位于 FreeRTOS/Demo/CORTEX_LPC1768_IAR/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 内请求上下文切换。 在 FreeRTOS/Demo/CORTEX_LPC1768_IAR/webserver/emac.c 中提供了一个名为 vEMAC_ISR() 的中断服务程序示例。 示例仅供参考。

请注意,portEND_SWITCHING_ISR() 会使中断保持启用。


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

FreeRTOS/Demo/CORTEX_LPC1768_IAR/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.