我正在使用Zynq(Picozed开发板)开展一个项目。该应用程序是裸机运行,在RAW模式下使用lwIP TCP,基本上表现如下:
问题是,我需要测量处理部分的执行时间。但是,在RAW模式下运行lwIP会强制我每250/500 ms调用一次tcp_fasttmr()和tcp_slowtmr(),这使得精确测量非常困难。每当我没有调用tcp_tmr()函数一段时间时,我就开始重复通过UART接收错误消息(“无法在recv_handler中分配pbuf”)。似乎这是从一些与错误处理相关的ISR调用的,但我无法找到确切的位置。
我的问题是,如何暂停网络功能,所以我不需要定期调用tcp_tmr()?我尝试关闭连接并禁用接口(netif_set_down())并禁用定时器中断,但它似乎仍然没有影响我的问题。
我对该开发板或微控制器一无所知,但你应该有一个ethernetif.c(lwIP端口)文件,该文件应包含以太网接收中断或类似处理。这应该用一个要处理的数据包调用lwIP函数netif->input
。
禁用接口不会停止此行为,它将停止更高级别的数据包处理。如果您只计算调试执行时间的长短,您可以尝试禁用以太网接收中断并停止调用tcp_tmr
,直到您处理完数据包。