暂停lwIP Raw API

时间:2017-08-16 12:12:38

标签: embedded xilinx bare-metal lwip zynq

我正在使用Zynq(Picozed开发板)开展项目。该应用程序是裸机运行,在RAW模式下使用lwIP TCP,基本上表现如下:

  1. 通过以太网接收一批数据,存储在RAM中。
  2. 处理批量数据。
  3. 通过以太网发送已处理的数据。
  4. 问题是,我需要测量处理部分的执行时间。但是,在RAW模式下运行lwIP会强制我每250/500 ms调用一次tcp_fasttmr()和tcp_slowtmr(),这使得精确测量非常困难。每当我没有调用tcp_tmr()函数一段时间后,我就开始重复通过UART接收错误消息("无法在recv_handler和#34中分配pbuf)。似乎这是从一些与错误处理相关的ISR调用的,但我找不到确切的位置。

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

1 个答案:

答案 0 :(得分:0)

我对该开发板或其上的微控制器一无所知,但您应该有一个ethernetif.c(lwIP端口)文件,该文件应包含以太网接收中断或类似处理。这应该使用要处理的数据包调用lwIP函数netif->input

禁用界面不会停止此行为,它将停止更高级别的数据包处理。如果您只计算调试执行时间的长短,您可以尝试禁用以太网接收中断并停止调用tcp_tmr,直到您处理完数据包为止。