RTOS 的TCP源代码中的关键关注点包含
应用程序可定义的宏,其目的是提供
应用程序特定的追踪功能。 应用程序仅需
实现相关宏,默认情况下未实现的宏
将保留为空(不生成任何代码)。
在 Windows 模拟器中运行的 FreeRTOS-Plus-TCP 示例(可
从本网站下载)使用
追踪宏以收集 TCP/IP 堆栈运行时间信息,然后
使用 TCP/IP CLI 接口查看。
宏定义
|
说明
|
iptraceNETWORK_DOWN()
|
当网络驱动器指示网络
连接已断开时调用此宏(并非所有网络驱动器
都能实现)。
|
iptraceNETWORK_BUFFER_RELEASED( pxBufferAddress )
|
当 pxBufferAddress 地址的网络缓冲区
被释放回 TCP/IP 堆栈时,调用此宏。
|
iptraceNETWORK_BUFFER_OBTAINED( pxBufferAddress )
|
当 pxBufferAddress 地址的网络缓冲区
被 RTOS 任务从 TCP/IP 堆栈获取时,调用此宏。
|
iptraceNETWORK_BUFFER_OBTAINED_FROM_ISR( pxBufferAddress )
|
当 pxBufferAddress 地址的网络缓冲区
被中断服务程序从 TCP/IP 堆栈获取时,调用此宏。
|
iptraceFAILED_TO_OBTAIN_NETWORK_BUFFER()
|
当任务尝试获取网络缓冲区,
但即使在任何定义的阻塞期后缓冲区仍不可用时,
调用此宏。
|
iptraceFAILED_TO_OBTAIN_NETWORK_BUFFER_FROM_ISR()
|
当中断服务程序尝试获取网络缓冲区,
但缓冲区不可用时,调用此宏。
|
iptraceCREATING_ARP_REQUEST( ulIPAddress )
|
当 IP 生成 ARP 请求数据包时调用此宏。
|
iptraceARP_TABLE_ENTRY_WILL_EXPIRE( ulIPAddress )
|
当 ARP 请求因为
ARP 缓存中 IP 地址 ulIPAddress 的条目已经失效而即将发送时,
调用此宏。 ulIPAddress 是以网络字节顺序表示的
32 位数字。
|
iptraceARP_TABLE_ENTRY_EXPIRED( ulIPAddress )
|
当
ARP 缓存中的 IP 地址 ulIPAddress 的条目被移除时,调用此宏。 ulIPAddress 是以网络字节顺序表示的
32 位数字。
|
iptraceARP_TABLE_ENTRY_CREATED( ulIPAddress, ucMACAddress )
|
当 ARP 表中创建了新条目,
用以将 IP 地址 ulIPAddress 映射到 MAC 地址
ucMACAddress 时,调用此宏。 ulIPAddress 是以网络字节顺序表示的
32 位数字。 ucMACAddress 是一个指向
MACAddress_t 结构体的指针。
|
iptraceSENDING_UDP_PACKET( ulIPAddress )
|
当 UDP 数据包被发送到 IP 地址 ulIPAddress 时,调用此宏。
ulIPAddress 是以网络字节顺序表示的
32 位数字。
|
iptracePACKET_DROPPED_TO_GENERATE_ARP( ulIPAddress )
|
当需要到达 IP 地址 ulIPAddress 的数据包
因为 ARP 缓存不包含该 IP 地址的条目而被丢弃时,
调用此宏。 数据包
会自动替换为 ARP 数据包。 ulIPAddress 是
以网络字节顺序表示的 32 位数字。
|
iptraceICMP_PACKET_RECEIVED()
|
收到 ICMP 数据包时调用此宏。
|
iptraceSENDING_PING_REPLY( ulIPAddress )
|
当 ICMP 回显回复 (ping 回复) 被发送至
IP 地址 ulIPAddress 以响应
来自同一地址的 ICMP 回显请求(ping 请求)时,调用此宏。
ulIPAddress 是以网络字节顺序表示的
32 位数字。
|
traceARP_PACKET_RECEIVED()
|
接收到 ARP 数据包时调用此宏,
即使本地网络节点未参与 ARP 事务。
|
iptracePROCESSING_RECEIVED_ARP_REPLY( ulIPAddress )
|
当 ARP 缓存即将更新
以响应收到 ARP 回复时,调用此宏。 ulIPAddress
包含 ARP 消息的目标 IP 地址(
以网络字节顺序表示的 32 位数字),
它可能不是本地网络节点(取决于 FreeRTOSIPConfig.h
设置)。
|
iptraceSENDING_ARP_REPLY( ulIPAddress )
|
正在发送 ARP 回复以响应来自 IP 地址 ulIPAddress 的 ARP 请求
。 ulIPAddress 是
以网络字节顺序表示的 32 位数字。
|
iptraceFAILED_TO_CREATE_SOCKET()
|
调用 FreeRTOS_socket() 失败,
因为创建套接字结构体的 FreeRTOS 堆内存不足
。
|
iptraceRECVFROM_DISCARDING_BYTES( xNumberOfBytesDiscarded )
|
FreeRTOS_recvfrom() 正在丢弃 xNumberOfBytesDosarded 字节,
因为接收的字节数
大于用户提供的缓冲区所能容纳的字节数
(作为
FreeRTOS_recvfrom() 函数参数传入的缓冲区)。
|
iptraceETHERNET_RX_EVENT_LOST()
|
当网络驱动器接收到的数据包由于以下原因被丢弃时,
调用此宏: 网络事件队列中没有足够空间
(请参阅 ipconfigEVENT_QUEUE_LENGTH 设置,
位于 FreeRTOSIPConfig.h 中)、接收的数据包存在
无效数据长度,或者没有可用的网络缓冲区
(请参阅
FreeRTOSIPConfig.h 中的 ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS 设置)。 请注意,此宏由
网络驱动器而非 TCP/IP 堆栈调用,
并且不能被第三方提供的驱动器调用。
|
iptraceSTACK_TX_EVENT_LOST( xEvent )
|
丢弃 TCP/IP 堆栈生成的数据包时调用此宏,
因为网络事件队列中没有足够空间
(请参阅 ipconfigEVENT_QUEUE_LENGTH 设置,
位于 FreeRTOSIPConfig.h 中)。
|
iptraceNETWORK_EVENT_RECEIVED( eEvent )
|
当 TCP/IP 堆栈处理此前发布到网络事件队列的事件时,
调用此宏。 eEvent 将为
以下值之一:
-
eNetworkDownEvent——网络接口已丢失及/或需要[重新]连接。
-
eNetworkRxEvent——网络接口已将接收的以太网帧排入队列。
-
eARPTimerEvent——ARP 定时器已过期。
-
eStackTxEvent—— 软件栈已将要传输的数据包排入队列。
-
eDHCPEvent——处理 DHCP 状态机。
请注意,事件由私有 eIPEvent_t 类型定义,
无法进行一般访问。
|
iptraceBIND_FAILED( xSocket, usPort )
|
调用 FreeRTOS_bind() 失败。 usPort 是移植号,
该移植号被套接字 xSocket 绑定。
|
iptraceDHCP_REQUESTS_FAILED_USING_DEFAULT_IP_ADDRESS( ulIPAddress )
|
使用默认 IP 地址时调用此宏,
因为无法从 DHCP 获取 IP 地址。 ulIPAddress
是以网络字节顺序表示的 32 位数字。
|
iptraceSENDING_DHCP_DISCOVER()
|
发送 DHCP 发现的数据包时调用此宏。
|
iptraceSENDING_DHCP_REQUEST()
|
发送 DHCP 请求数据包时调用此宏。
|
iptraceNETWORK_INTERFACE_TRANSMIT()
|
网络驱动器将数据包发送到网络时,
调用此宏。 请注意,此宏由
网络驱动器而非 TCP/IP 堆栈调用,
并且不能被第三方提供的驱动器调用。
|
iptraceNETWORK_INTERFACE_RECEIVE()
|
网络驱动器从网络接收到数据包时,
调用此宏。 请注意,此宏由
网络驱动器而非 TCP/IP 堆栈调用,
并且不能被第三方提供的驱动器调用。
|
iptraceSENDING_DNS_REQUEST()
|
发送 DNS 请求时调用此宏。
|
iptraceWAITING_FOR_TX_DMA_DESCRIPTOR()
|
当网络驱动器级别的传输无法立即完成时,
调用此宏,因为驱动器需
等待 DMA 描述符的空闲状态。 尝试
增加
FreeRTOSConfig.h 中的 configNUM_TX_ETHERNET_DMA_DESCRIPTORS 设置(如果所使用的网络驱动器
存在该设置)。
|
iptraceDHCP_SUCCEDEED( ulOfferedIPAddress )
|
当 DHCP 协商完成并且 ulOfferedIPAddress 中的 IP 地址被提供给设备时调用此宏。
|
iptraceDROPPED_INVALID_ARP_PACKET( pxARPHeader )
|
当无效协议和地址 pxARPHeader 标头中的硬件字段导致 ARP 数据包被丢弃时,调用此宏。
|
iptraceFAILED_TO_CREATE_EVENT_GROUP()
|
在创建新套接字期间无法创建事件组(可能是由于堆空间不足)时,调用此宏。
|
iptraceMEM_STATS_CLOSE()
|
在应停止收集内存统计信息时,应用程序应调用此宏。
|
iptraceMEM_STATS_CREATE( xMemType, pxObject, uxSize )
|
当从堆中分配了地址 pxObject 中的对象,其类型为 xMemType 且大小为 uxSize 时,调用此宏。
|
iptraceMEM_STATS_DELETE( pxObject )
|
当对地址 pxObject 中的对象解除了分配,并且内存返回到堆时,调用此宏。
|
iptraceNETWORK_INTERFACE_INPUT( uxDataLength, pucEthernetBuffer )
|
当收到长度为 uxDataLength 且内容位于地址 pucEthernetBuffer 处的数据包时,调用此宏。
|
iptraceNETWORK_INTERFACE_OUTPUT( uxDataLength, pucEthernetBuffer )
|
当发送了长度为 uxDataLength 且内容位于地址 pucEthernetBuffer 处的数据包时,调用此宏。
|
iptraceNO_BUFFER_FOR_SENDTO()
|
当对 FreeRTOS_sendto() 的调用尝试分配缓冲区,但经过任何定义的阻塞时间,缓冲区仍不可用时,调用此宏。
|
iptraceRECVFROM_INTERRUPTED()
|
当通过调用 FreeRTOS_SignalSocket() 中断对 FreeRTOS_recvfrom() 的阻塞调用时,调用此宏。
|
iptraceRECVFROM_TIMEOUT()
|
当经过任何定义的阻塞时间后,FreeRTOS_recvfrom() 仍未获取给定套接字上的数据时,调用此宏。
|
iptraceSENDTO_DATA_TOO_LONG()
|
当请求通过调用 FreeRTOS_sendto() 发送的数据太长而无法发送时,调用此宏。
|
iptraceSENDTO_SOCKET_NOT_BOUND()
|
当对 FreeRTOS_sendto() 的调用中使用的套接字尚未绑定到端口时,调用此宏。
|
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.