下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

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

TCP/IP 特定追踪钩子宏
用于调试和优化 FreeRTOS-Plus-TCP 行为

另请参阅 调试、追踪和日志记录设置 (在 FreeRTOSIOConfig.h 中)。

描述

追踪钩宏让您在 FreeRTOS-Plus-TCP 应用程序运行期间 收集数据。 数据可用于调试和 优化目的。

RTOS 的TCP源代码中的关键关注点包含 应用程序可定义的宏,其目的是提供 应用程序特定的追踪功能。 应用程序仅需 实现相关宏,默认情况下未实现的宏 将保留为空(不生成任何代码)。

建议在头文件中实现追踪宏,然后 #include 位于 FreeRTOSIPConfig.h 底部的头文件。

在 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.