Embedded 暂停lwIP原始API的操作

Embedded 暂停lwIP原始API的操作,embedded,xilinx,bare-metal,lwip,zynq,Embedded,Xilinx,Bare Metal,Lwip,Zynq,我正在使用Zynq(Picozed devboard)进行一个项目。应用程序是裸机运行的,在原始模式下使用lwIP TCP,其行为基本如下: 通过以太网接收一批数据,这些数据存储在RAM中 处理该批数据 通过以太网发回处理后的数据 问题是,我需要测量处理部分的执行时间。然而,在原始模式下运行lwIP迫使我每250/500毫秒调用一次tcp_fasttmr()和tcp_slowtmr(),这使得精确测量变得非常困难。每当我有一段时间没有调用tcp_tmr()函数时,我就会开始通过UART反复接收错

我正在使用Zynq(Picozed devboard)进行一个项目。应用程序是裸机运行的,在原始模式下使用lwIP TCP,其行为基本如下:

  • 通过以太网接收一批数据,这些数据存储在RAM中
  • 处理该批数据
  • 通过以太网发回处理后的数据
  • 问题是,我需要测量处理部分的执行时间。然而,在原始模式下运行lwIP迫使我每250/500毫秒调用一次tcp_fasttmr()和tcp_slowtmr(),这使得精确测量变得非常困难。每当我有一段时间没有调用tcp_tmr()函数时,我就会开始通过UART反复接收错误消息(“无法在recv_处理程序中分配pbuf”)。这似乎是从一些与错误处理相关的ISR调用的,但我无法真正找到确切的位置


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

    我不知道关于该devboard或其上的微控制器的任何信息,但您应该有一个ethernetif.c(lwIP端口)包含以太网接收中断或类似处理的文件。这应该是使用要处理的数据包调用lwIP函数
    netif->input


    禁用接口不会停止这种行为,它只会停止更高级别的数据包处理。如果您只是对调试的执行时间进行计时,您可以尝试禁用Ethernet接收中断并停止调用
    tcp\u tmr
    ,直到您处理完数据包。

    我不知道关于该主板或其上的微控制器的任何信息,但您应该有一个ethernetif.c(lwIP端口)包含以太网接收中断或类似处理的文件。这应该是使用要处理的数据包调用lwIP函数
    netif->input

    禁用接口不会停止这种行为,它只会停止更高级别的数据包处理。如果只对调试的执行时间进行计时,可以尝试禁用以太网接收中断并停止调用
    tcp\u tmr
    ,直到处理完数据包