移植 FreeRTOS+TCP - FreeRTOS
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

移植 FreeRTOS+TCP

FreeRTOS+TCP 是 FreeRTOS 内核的原生 TCP/IP 堆栈。有关更多信息,请参阅 FreeRTOS.org

先决条件

要移植 FreeRTOS+TCP 库,您需要以下信息:

  • 包括供应商提供的以太网或 Wi-Fi 驱动程序在内的 IDE 项目或 CMakeLists.txt 列表文件。

    有关设置测试项目的信息,请参阅为移植设置 FreeRTOS 源代码

  • FreeRTOS 内核的经验证配置。

    有关为您的平台配置 FreeRTOS 内核的信息,请参阅配置 FreeRTOS 内核移植

移植

在开始移植 FreeRTOS-TCP 库之前,请检查 /libraries/freertos_plus/standard/freertos_plus_tcp/source/portable/NetworkInterface 目录以确定是否已具有到您的设备的移植。

如果移植不存在,请执行以下操作:

  1. 按照 FreeRTOS.org 上将 FreeRTOS+TCP 移植到不同微控制器的说明,将 FreeRTOS+TCP 移植到您的设备。

  2. 如有必要,请按照 FreeRTOS.org 上将 FreeRTOS+TCP 移植到新的嵌入式 C 编译器的说明,将 FreeRTOS+TCP 移植到新的编译器。

  3. 在名为 NetworkInterface.c 的文件中实施使用供应商提供的以太网或 Wi-Fi 驱动程序的新移植,并将该文件保存到 /libraries/freertos_plus/standard/freertos_plus_tcp/source/portable/NetworkInterface/board_family 中。

    注意

    /libraries/freertos_plus/standard/freertos_plus_tcp/source/portable/BufferManagement 目录中的文件由多个移植使用。请勿编辑此目录中的文件。

在创建移植后,或者如果移植已存在,请打开 /vendors/vendor/boards/board/aws_tests/config_files/FreeRTOSIPConfig.h 并编辑配置选项,以使它们适合您的平台。有关配置选项的更多信息,请参阅 FreeRTOS.org 上的 FreeRTOS+TCP 配置

测试

如果使用 IDE 构建测试项目,您需要在 IDE 项目中设置库移植。

设置 IDE 测试项目

如果使用 IDE 进行移植和测试,您需要先将一些源文件添加到 IDE 测试项目中,然后才能测试移植的代码。

重要

在以下步骤中,请确保您将源文件从磁盘上位置添加到了 IDE 项目。请勿创建源文件的重复副本。

在 IDE 项目中设置 FreeRTOS+TCP 库

  1. /libraries/freertos_plus/standard/freertos_plus_tcp 及其子目录中的所有源文件和标头文件添加到 aws_tests IDE 项目中。

    注意

    FreeRTOS 在 /freertos_kernel/portable/MemMang 中包含 5 个示例堆管理实施。FreeRTOS+TCP 和 BufferAllocation_2.c 需要 heap_4.cheap_5.c 实施。您必须使用 heap_4.cheap_5.c 以确保 FreeRTOS 演示应用程序正常运行。请勿使用自定义堆栈实施。

  2. /libraries/freertos_plus/standard/freertos_plus_tcp/include 添加到编译器的包含路径中。

配置 CMakeLists.txt 文件

如果使用 CMake 构建测试项目,您需要在 CMake 列表文件中为库定义一个可移植层目标。

要在 CMakeLists.txt 中定义库的可移植层目标,请按照FreeRTOS 可移植层中的说明进行操作。

/vendors/vendor/boards/board/CMakeLists.txt 中的 CMakeLists.txt 模板列表文件包括示例可移植层目标定义。您可以取消注释要移植的库的定义,并对其进行修改以适合您的平台。

设置本地测试环境

在 IDE 项目中设置库后,您需要配置一些其他文件以进行测试。

为 TCP 测试配置源文件和标头文件

  1. 如果您尚未移植安全套接字库,请打开 /libraries/freertos_plus/standard/utils/src/iot_system_init.c,并在函数 SYSTEM_Init() 中注释掉调用 SOCKETS_Init() 的行。当您浏览至移植安全套接字库部分时,该部分将指导您如何取消注释此初始化函数调用。

  2. 打开 /vendors/vendor/boards/board/aws_tests/application_code/main.c,然后取消注释对 FreeRTOS_IPInit() 的调用。

  3. 使用您网络的有效值填写以下数组:

    变量 描述
    uint8_t ucMACAddress[ 6 ] 默认 MAC 地址配置。
    uint8_t ucIPAddress[ 4 ]

    默认 IP 地址配置。

    注意

    默认情况下,由 DHCP 获取 IP 地址。如果 DCHP 失败,或者如果您不想使用 DHCP,则使用此处定义的静态 IP 地址。

    要禁用 DCHP,请打开 /vendors/vendor/boards/board/aws_tests/config_files/FreeRTOSIPConfig.h 并将 ipconfigUSE_DHCP 设置为 0

    uint8_t ucNetMask[ 4 ] 默认网络掩码配置。
    uint8_t ucGatewayAddress[ 4 ] 默认网关地址配置。
    uint8_t ucDNSServerAddress[ 4 ] 默认 DNS 服务器地址配置。
  4. 打开 /vendors/vendor/boards/board/aws_tests/config_files/FreeRTOSIPConfig.h,并将宏 ipconfigUSE_NETWORK_EVENT_HOOK 设置为 1

  5. 打开 /vendors/vendor/boards/board/aws_tests/application_code/main.c,然后将以下代码添加到 vApplicationIPNetworkEventHook() 的函数定义开头:

    if (eNetworkEvent == eNetworkUp) { configPRINT("Network connection successful. \n\r"); }

运行测试

执行 FreeRTOS+TCP 测试

  1. 构建测试项目,然后将其刷写到您的设备以执行该项目。

  2. 在 UART 控制台中检查测试结果。如果 Network connection successful 显示,则以太网或 Wi-Fi 驱动程序成功连接到网络,测试完成。

验证

要正式对设备进行 FreeRTOS 资格认证,您需要使用 AWS IoT Device Tester 验证设备的移植源代码。按照《FreeRTOS 用户指南》中的将 AWS IoT Device Tester 用于 FreeRTOS 中的说明操作,设置 Device Tester 以进行移植验证。要测试特定库的移植,必须在 Device Tester configs 文件夹下面的 device.json 文件中启用正确的测试组。