c - 如何在 lwip 堆栈中实现 tcp-poll 功能

标签 c tcp xilinx lwip

我正在对 fpga 板 ZYNQ XC7Z010-1CLG400C 进行编程。我正在连续测量来自 ADC 的数据,将数据保存在缓冲区 (MesStrBuf) 中,然后使用 lwip satck 通过以太网发送此缓冲区。
当我在没有函数 tcp_poll() 的情况下实现程序时,以太网上的数据传输被中止。通过以太网的连接被中止的原因是缓冲区 tcp_snd_buf 变满并且使用 tcp_write 和 tcp_output 部分发送数据,尽管我在每个 tcp_write()

这就是为什么我要使用函数tcp_poll()直到数据发送完毕(我想等到数据发送完)然后我可以连续运行程序并重复程序一次又一次没有问题,就像我想的那样。

所以我要执行命令

 tcp_poll(tpcb,poll_function,1);

但是函数poll_function()应该如何实现呢?

是我必须在 poll_function() 中实现的 TCP 连接的 PCB(协议(protocol)控制 block )也是 tcp_write 中使用的 PCB(tpcb) ()?

如何在poll_function() 中调用tcp_write()?或者不需要在poll_function()中调用tcp_write()

这是代码:

err_t recv_callback(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)
{
    for(j=0;j<count;j++)
    {
        // write buffer **MesStrBuf** for sending
        err = tcp_write(tpcb, MesStrBuf, sizeof(MesStrBuf), 1); 
        // prompt the system to send data now
        tcp_output(tpcb);
        tcp_poll(tpcb,poll_function,1);
    }
}

最佳答案

来自documentation :

typedef err_t(* tcp_poll_fn) (void *arg, struct tcp_pcb *tpcb)

关于c - 如何在 lwip 堆栈中实现 tcp-poll 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47164610/

相关文章:

c++ - 这是什么 ?在读取使用 Unicode 编码的文本文件后控制台输出的开头?

c - 二进制文件中的字节顺序不一致

java/android TCP sockets - 检测服务器是否离线

c - 使用 pcap 解析跟踪文件?

fpga - Zynq7/Zedboard : Xil_in32 alters data when reading from DRAM

c - C语言如何查找桌面路径?

c - 尝试在内存中构建目录树时出现指针问题

javascript - 可以在 Android 和 iOS 设备上通过 Javascript 进行 TCP 或 WebSockets 调用吗?

c - 使用 Microblaze 设置计时器?

cryptography - FPGA逻辑单元数量与性能的关系