下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

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

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



注意:此演示使用 Red Suite IDE 创建。 NXP Semiconductors(恩智浦半导体)自此 收购了 Code Red 的技术,现在演示可以与 NXP Semiconductors 的 LPCXpresso IDE 一起使用。


本页演示内容预配置为在 Code Red 的 RDB1768 评估板上运行(Code Red 已由 NXP Semiconductors 收购)。 评估板安装有 LPC1768 来自 NXP Semiconductors 的 Cortex-M3 微控制器。

此演示使用:

  • FreeRTOS GCC ARM Cortex-M3 移植。
  • Code Red 的基于 Eclipse 的 Red Suite IDE (如本页顶部所示,现在是 NXP Semiconductors 的 LPCXpresso IDE ) ,标配 FreeRTOS 状态查看器插件。 使用 Eclipse “托管 make”项目。
  • Adam Dunkels 开源的 uIP 嵌入式 TCP/IP 堆栈,用于实现运行 CGI 脚本的 Web 服务器。
  • Bertrik Sikkens 开源的 LPCUSB USB 堆栈,用于实现 CDC 类回显服务器。
RDB1768 内置 Red Probe 调试接口,因此无需其他调试接口硬件。

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

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


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

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

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

源代码组织

LPC1768 演示的 Red Probe 项目位于 FreeRTOS/Demo/CORTEX_LPC1768_GCC_RedSuite 目录。这是 将项目导入 Red Suite 工作区时要选择的目录。

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


演示应用程序

创建项目目录结构

使用 Eclipse 托管 make 构建的最简单方法是在包含 Eclipse 项目文件的目录下找到所需的构建文件(C 源文件、头文件和链接器脚本) 所需的构建文件(C 源文件、头文件和链接器脚本)。 FreeRTOS/Demo/CORTEX_LPC1768_GCC_RedSuite/CreateProjectDirectoryStructure.bat 是一个批处理文件,它将从目录结构中的正常位置将所需文件复制到目录下的子目录 FreeRTOS Eclipse 项目目录的子目录中。 在尝试构建之前,必须执行批处理文件。

从命令提示符或 Windows 资源管理器执行 CreateProjectDirectoryStructure.bat。 该文件无法 在 Eclipse 环境中成功执行。


将项目导入 Red Suite 工作区

  1. 启动 Red Suite。 启动后,系统将提示您选择工作区位置。 您可以使用现有工作区, 或者在方便的位置创建一个新的工作区。

  2. 在 Red Suite IDE 中,从 "File" 菜单中选择 "Import..."。

  3. 此时将显示一个对话框。 选择 "Existing Projects Into Workspace",然后单击 "Next"。

  4. 浏览并选择 FreeRTOS/Demo/CORTEX_LPC1768_GCC_RedSuite 目录,完成导入过程。 请注意: 进行最后一步过程中,不要选中 "Copy projects into workspace" 复选框。


将 FreeRTOS 项目导入 Red Suite 工作区

Web 服务器配置

直接使用点对点(交叉)电缆或通过使用标准以太网电缆的集线器/路由器将 RDB1768 开发板连接到 运行 Web 浏览器的计算机上。

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

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


构建和执行演示应用程序

  1. 打开 main.c 并搜索以 "#error" 开头的行。 删除该行(提供了关于设置目录结构的说明, 适用于那些没有阅读说明而使用项目的用户)。
  • 使用调试 USB 端口将 RDB1768 连接到主机计算机。 这既可为目标供电,又提供了调试接口。

  • 要构建项目,只需在 "Project" 菜单中选择 "Build All" 即可。 构建应用程序时不应存在错误 或警告(假设 #error 语句已被删除)。

  • 需要创建启动配置才能启动调试会话。 启动配置只需创建一次,此后 只需单击 "Debug" 速度按钮即可启动调试会话。 要创建启动配置, 首先在 "Run" 菜单中选择 "'Open Debug Dialog..."。

  • 在打开的对话框中,双击 'C/C++ MCU Application',创建新配置。 配置 参数会自动设置。
  • 最后单击 "Debug" 对 MCU 闪存进行编程并启动调试会话。

  • 设置启动配置


    功能

    演示应用程序在启动 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 2、3 和 5 由标准 "flash" 任务控制。 各 LED 将以不同的固定频率切换。

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

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

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

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

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


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


    提供的网页

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


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



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


    提供的 IO 页面

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

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



    RTOS 配置和使用详情


    RTOS 移植特定配置

    这些演示的特定配置项目位于 FreeRTOS/Demo/CORTEX_LPC1768_GCC_RedSuite/src/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_RedSuite/src/webserver/emac.c 中提供。 示例仅供参考。

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


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

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