下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

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

TCP/IP 堆栈网络缓冲区分配方案
及其对简单性、CPU 负载和吞吐量性能的影响

网络数据缓冲区

发送到网络或从网络接收的数据放置于 网络缓冲区。 网络缓冲区描述符保存有关网络缓冲区的 信息。 描述符是预先分配的,网络缓冲区 则根据需要进行分配。

描述符的总数由 ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS 设置, 该常量位于 FreeRTOSIPConfig.h 中。 预先分配描述符使 应用程序编写者得以限制 能同时存在的网络缓冲区的 最大数量,以防止内存耗尽。

不同的缓冲区 分配方案适合不同的嵌入式应用程序。 因此 FreeRTOS-Plus-TCP 保留缓冲区分配方案,作为 TCP/IP 堆栈可移植层的一部分。 在写入时,将提供两个示例缓冲区 分配方案,两个方案在简单性、 RAM 使用效率和性能上都有不同的权衡。 本页详细介绍了 这两个方案。


实现缓冲区分配方案的 C 源文件位于 FreeRTOS-Plus/FreeRTOS_Plus_TCP/portable/BufferManagement 目录中。 一次只能使用一个方案。


缓冲区分配方案

方案 1: 由 BufferAllocation_1.c 实现

说明  
  • 以太网缓冲区 由嵌入式以太网外设驱动器静态分配(在编译时)。 这确保缓冲区可以按照 特定以太网硬件的要求进行对齐。

    BufferAllocation_1.c 调用 vNetworkInterfaceAllocateRAMToBuffers() 函数, 该函数必须由外围驱动程序提供。 详细说明此函数要求的信息 在 《必须由端口层提供的函数》一章 (位于“嵌入式以太网驱动器移植” 文档页面上)可以找到。

属性  
  • 运行时性能高。
  • 以太网缓冲区可从 中断分配和释放,让嵌入式 以太网外设驱动程序变得更加高效。
  • RAM 使用效率低——所有缓冲区都 大小相同,使的 BufferAllocation_1.c 不适合 某些 RAM 受限的嵌入式系统。
  • 与 由 BufferAllocation_2 实现的方案相比,此方案在配置和调整上更复杂。
  • 更容易实现 嵌入式以太网 外设 DMA 提出的任何特殊的缓冲区对齐要求。
  • 需要网络接口驱动程序的支持 (请参阅上文的要点说明部分)。

用法  
  • ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS 常数(在 FreeRTOSIPConfig.h 中) 定义描述符的总数和 缓冲区总数。
  • ipconfigNETWORK_MTU constant(在 FreeRTOSIPConfig.h 中定义) 定义了每个以太网缓冲区的大小 (以太网帧的总大小就是所定义的 MTU 大小加上 以太网标头所需的字节数)。


方案 2: 由 BufferAllocation_2.c 实现

说明  
  • 根据需要,动态分配和释放以太网缓冲区的大小 。 这 需要不受碎片化影响的 快速内存分配方案——建议在当时或写入时 使用 heap_4.c 或 heap_5.c

属性  
  • 非常容易使用。
  • 与由 BufferAllocation_1.c 实现的方案相比, 动态分配导致运行时性能更低 。
  • 不能从中断中分配和释放以太网缓冲区, 必须在嵌入式以太网外设驱动器中使用 延迟中断处理任务 。
  • RAM 使用效率很高——精确分配所需的 RAM 大小,使得 BufferAllocation_2.c 特别适合 RAM 受限的小型嵌入式 系统而打造。

用法  
  • 以太网缓冲区从 FreeRTOS 堆中分配。 为了避免 内存碎片化问题,BufferAllocation_2.c 只有与 结合了堆内存空闲块的方案 (合并算法)一起使用才可靠。 在 heap_4.c 中实现 FreeRTOS 内存分配 方案是合适的。 如果标准库的 malloc() 和 free() 能够处理碎片, 那么也可以使用在 heap_3.c 中实现的内存分配方案。
  • 由于堆内存太少,TCP/IP 堆栈会在尝试分配 网络缓冲区 失败后恢复,然而,由于使用了 标准堆实现,这样的失败将导致 内存分配失败钩子被调用(如果 configUSE_MALLOC_FAILED_HOOK 在 FreeRTOSConfig.h 中设置为 1)。

Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.