下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

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

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




此页面提供了 Rowley CrossWorks FreeRTOS Web 服务器和 USB 演示,该演示预配置为运行在 Keil MCB1700 评估板上。 MCB1700 使用 LPC1768 来自 NXP 的 Cortex-M3 微控制器。

此演示使用:

  • FreeRTOS GCC ARM Cortex-M3 移植。
  • Rowley CrossWorks IDE 2.0 版本。
  • Adam Dunkels 开源的 uIP 嵌入式 TCP/IP 堆栈,用于实现运行 CGI 脚本的 Web 服务器。
  • Bertrik Sikkens 开源的 LPCUSB USB 堆栈,用于实现 CDC 类回显服务器。
我使用 Amontec JTAGKey-Tiny 和 ARM 的 CrossConnect 测试了开发环境。 两者都工作良好,尽管 Amontec 设备慢了很多。

uIP 和 LPCUSB 与 FreeRTOS 分开授权。 用户必须熟悉 uIPLPCUSB 许可。

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

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


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

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

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

源代码组织

LPC1768 演示的 CrossWorks 项目名为 RTOSDemo.hzp,位于 FreeRTOS/Demo/CORTEX_LPC1768_GCC_Rowley 目录。

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


演示应用程序

Web 服务器配置

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

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

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


构建和执行演示应用程序

  1. 在 CrossStudio IDE 中打开 FreeRTOS/Demo/CORTEX_LPC1768_GCC_Rowley

  2. 使用您选择的调试接口将 MCB1700 连接到主机,然后在 "Target" 菜单选择 "Connect" 连接到目标 。

  3. 在 "Build" 菜单选择 "Build and Debug",演示应用程序应当成功构建,没有错误或警告,之后 程序写入到微控制器闪存。 调试器将在进入 main() 时中断。


功能

演示应用程序在启动 RTOS 调度器之前会创建 36 个任务。这些任务主要包括 标准演示任务(参见演示应用程序部分, 了解各个任务的详细信息)。这些任务的唯一目的是测试 RTOS 内核移植并 演示如何使用各种 API 函数。

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

  • 检查函数 - 从 tick hook 调用

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

  • uIP 任务

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

  • USB 任务

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

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

  • LED P2.2、P2.3 和 P2.4 由标准 'flash' 任务控制。 各 LED 将以不同的固定频率切换。

  • MCB1700 的 USB 设备端口将枚举为 CDC 类设备。 要使用 USB 端口(假设是 Windows 主机):

    1. 使用 MCB1768 的 USB 设备端口将 MCB1700 连接到主机(确保跳线设置正确,以便设备运行)。
    2. 主机计算机应识别新的 USB 连接,并提示合适的 .inf 文件的位置。 选择选项 手动选择 .inf 文件位置,然后浏览到 usbser.inf, 该文件位于 FreeRTOS/Demo/CORTEX_LPC1768_GCC_Rowley 目录。 假设 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 的状态。 点击 "Update IO" 按钮可将变更发送到目标硬件。

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



RTOS 配置和使用详情


RTOS 移植专用配置

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

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


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

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