NXP LPC1766 ARM Cortex-M3 演示
包含 uIP 嵌入式 Web 服务器示例
[嵌入式以太网示例]
本演示现已弃用 ,请参阅 LPC1768 LPCXpresso 页面
获取有关其替代演示的信息。
本页的演示在 LPC1766 上开发,该微控制器安装在 MCB2300 开发板上。 演示使用的微控制器
是一个试生产原型,与现在可用的生产部件有许多差异,因此没有配置
为最佳性能。
本演示使用:
- FreeRTOS GCC ARM Cortex-M3 移植。
- 基于 Eclipse 的 Red Suite IDE。该 IDE 由 Code Red 推出,标配 FreeRTOS 状态查看器插件。 请注意,必须使用 Red Suite 2.0.6 或更高版本。
- Red Probe 调试接口。
- Adam Dunkels 开源 uIP 嵌入式 TCP/IP 堆栈。
uIP 与 FreeRTOS 分开授权。 用户必须熟悉 uIP 许可证。
演示使用 Eclipse "standard make" 项目,这意味着所有构建选项都包含在标准 makefile 文件中,而不是在 Red Suite 项目选项中。
makefile 还可用于从命令行构建应用程序。
FreeRTOS ARM Cortex-M3 移植包括一个完全中断嵌套模型。必须按照
自定义页面上的说明设置中断优先级才能正确操作。
重要提示!关于使用 NXP ARM Cortex-M3 Web 服务器演示的注意事项
使用此 RTOS 移植之前,请阅读以下所有要点。
- 源代码组织
- 演示应用程序
- RTOS 配置和使用详情
另请参阅常见问题:我的应用程序未运行,问题可能出在哪里?
源代码组织
LPC1766 演示的 Red Suite 项目位于 FreeRTOS/Demo/CORTEX_LPC1766_GCC_RedSuite 目录。这是
将项目导入 Red Suite 工作区时要选择的目录。
下载的 FreeRTOS zip 文件包含所有移植文件和演示应用程序项目文件。因此,该文件所含文件
远超此演示所用的文件。请参阅源代码组织部分,获取已下载文件的描述以及关于创建新项目的信息
。
演示应用程序
将项目导入 Red Suite 工作区
- 启动 Red Suite。 启动后,系统将提示您选择工作区位置。 您可以使用现有工作区,
或者在方便的位置创建一个新的工作区。
- 在 Red Suite IDE 中,从 "File" 菜单中选择 "Import..."。
- 此时将显示一个对话框。 选择 "Existing Projects Into Workspace",然后单击 "Next"。
- 浏览并选择 FreeRTOS/Demo/CORTEX_LPC1766_GCC_RedSuite 目录,完成导入过程。 请注意:
进行最后一步过程中,不要选中 "Copy projects into workspace" 复选框。

将 FreeRTOS 项目导入 Red Suite 工作区
配置 "Linked Resource"
Red Suite 项目引用了许多 FreeRTOS 演示应用程序共用的源文件,这些源文件
位于项目目录之外。 Red Suite 项目引用这些文件的路径相对于 FREERTOS_ROOT 链接资源变量,必须设置该变量
指向主机上 FreeRTOS 目录的根目录。
- 在 Red Suite IDE 中,从 "Window" 菜单中选择 "Preferences..."。
- 在 "General" - "Workspace" 下找到 "Linked Resource" 首选项。
- 点击 "New" 创建新的链接资源。 命名该链接资源为 FREERTOS_ROOT 并将其位置设置为
计算机上 FreeRTOS 目录的根目录(它应该指向包含 Source 和 Demo 子目录的目录)。
- 正确设置链接资源后,在 "File" 菜单中选择 "Refresh"。 这会强制 Red Suite 重新定位
使用新链接资源的所有项目文件。

设置 FREERTOS_ROOT 链接资源
Web 服务器配置
直接使用点对点(交叉)电缆或使用标准以太网电缆通过以太网交换机将 MCB2300 开发板连接到运行
Web 浏览器的计算机上。 [请注意:在初始版本的开发过程中,我们注意到演示
并不适用于所有路由器配置]。
演示使用的 IP 地址是由
文件 FreeRTOS/Demo/CORTEX_LPC1766_GCC_RedSuite/RTOSDemo/FreeRTOSConfig.h 中的 configIP_ADDR0 到 configIP_ADDR3 等常量设置的。 MAC 地址和网络掩码
配置在同一头文件中。
运行 Web 浏览器的计算机使用的 IP 地址必须和 LPC1766 开发板使用的 IP 地址相兼容。
为此,可以将二者 IP 地址中的前三个八进制数设置成相同的值。
例如,如果运行 Web 浏览器的计算机的 IP 地址是
192.168.100.1,那么开发板的 IP 地址可以使用 192.168.100.2 到 192.168.100.254 范围内的任何地址
(网络中已存在的地址除外)。
构建和执行演示应用程序
- 将 Red Probe 连接到 MCB2300 和主机之间。
- 要构建项目,只需在 "Project" 菜单中选择 "Build All" 即可。 应用程序应该成功构建,没有错误
或警告。 如果有错误生成,请仔细检查 FREERTOS_ROOT 链接资源的设置。
- 需要创建启动配置才能启动调试会话。 启动配置只需创建一次,此后
只需单击 "Debug" 速度按钮即可启动调试会话。 要创建启动配置,
首先在 "Run" 菜单中选择 "'Open Debug Dialog..."。
- 在打开的对话框中,双击 "C/C++ MCU Application" 创建新配置,然后点击
项目的 "Browse" 和 C/C++ 应用程序的 "Search Project" 按钮分别设置项目和二进制文件。
最后单击 "Debug" 对 MCU 闪存进行编程并启动调试会话。

设置启动配置
功能性
演示应用程序在启动 RTOS 调度器之前会创建 35 个任务。这些任务主要包括
标准演示应用程序任务(请参阅演示应用程序
部分,了解各个任务的详细信息)。这些任务的唯一目的是测试 RTOS 内核移植并
演示如何使用各种 API 函数。
除了标准演示任务外,应用程序还创建了以下任务和测试:
- LCD 任务
LCD 任务是一项“守卫”任务。它是唯一允许
直接访问 LCD 的任务。其他任务或中断要向 LCD 写入消息,
需要通过队列将消息发送给 LCD 任务,而不是直接访问 LCD。
LCD 任务只是阻塞等待队列上的消息——当消息到达时唤醒
并展示消息。
- 检查函数——从滴答钩子调用
它每 5 秒钟执行一次。其主要功能是检查所有
标准演示任务是否仍在运行。如果在标准演示任务中发现任何意外行为,
"check" 函数将向 LCD 写入错误(通过
LCD 任务)。如果所有的演示任务都以预期行为执行,
那么检查任务会按上述方式将 PASS 写入 LCD(再次通过 LCD 任务)
。
检查函数在中断服务程序的上下文中执行,因此
能够很好地说明使用守卫任务控制 LCD 是如何允许
中断向 LCD 输出消息。
- uIP 任务
它是处理 uIP 堆栈的任务。 所有的 TCP/IP 处理都是在该任务中进行。
如果演示应用程序正确执行,其表现如下:
- "check" 函数每 5 秒向 LCD 写入一次 "PASS"。
- 目标硬件将向标准 Web 浏览器提供下述网页。 要连接到目标,请执行下列操作:
- 在连接的计算机上打开浏览器。
- 先在浏览器地址栏中输入 "HTTP://",再输入目标 IP 地址。
在浏览器中输入 IP 地址
(当然,根据您的系统,使用正确的 IP 地址)
提供的网页
每个提供的页面顶部包含一个菜单,其中含有指向其他每个页面的链接。
提供的 RTOS 统计信息页面显示了系统中每个任务的状态信息。
提供的运行时统计信息页面显示了每个任务的处理器利用率。
提供的 IO 页面
IO 页面提供了一个简单的接口,可以将数据发送到开发板上的 LED 和 LCD。
复选框可以设置和查询用户 LED 的状态。 文本框可用于向 LCD 写入消息,
但不会查询当前显示的文本。
点击 "Update IO" 按钮可将变更发送到目标硬件。
TCP 统计信息和连接页面显示运行时网络信息。
RTOS 移植的特定配置
这些演示的特定配置项目包含在 FreeRTOS/Demo/CORTEX_LPC1766_GCC_RedSuite/FreeRTOSConfig.h 中。 编辑本文件中定义的常量,
在本文件中定义的常量,以适配您的应用程序。 特别是-
注意:请记住 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_LPC1766_GCC_RedSuite/webserver/emac.c 中提供。 示例仅供参考。
请注意,portEND_SWITCHING_ISR() 会使中断保持启用。
在抢占式和协同式 RTOS 内核之间切换
将 FreeRTOS/Demo/CORTEX_LPC1766_GCC_RedSuite/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.