2017-08-16 74 views
0

我正在使用ZYNQ(Picozed devboard)一个项目的操作。在应用程序运行裸金属,使用了lwIP TCP在RAW模式和主要表现这样的:暂停LWIP的原始API

  1. 经由以太网,其被存储在RAM中接收一批数据。
  2. 处理该批数据。
  3. 通过以太网发送回处理的数据。

的问题是,我需要测量处理部的执行时间。但是,在RAW模式下运行lwIP会强制我每250/500 ms调用一次tcp_fasttmr()和tcp_slowtmr(),这使得精确的测量非常困难。每当我没有调用tcp_tmr()函数一段时间时,我开始通过UART重复接收错误消息(“无法在recv_handler中分配pbuf”)。看起来这是从一些与错误处理相关的ISR调用的,但我无法真正找到确切的位置。

我的问题是,我该如何暂停网络功能,所以我并不需要定期调用tcp_tmr()?我尝试关闭连接并禁用接口(netif_set_down())并禁用定时器中断,但它似乎仍然对我的问题没有影响。

回答

0

我不知道这devboard或在其上的微控制器什么,但你应该有一个ethernetif.c(LWIP的端口)文件,该文件应包含以太网的处理接收中断或相似。这应该是调用lwIP函数netif->input与数据包进行处理。

禁用界面不会停止这种行为,它只会停止数据包的更高层次的处理。如果您只是计时多长时间进行调试,您可以尝试禁用以太网接收中断并停止调用tcp_tmr,直到处理完数据包。