2 mazihong mazihong 于 2016.09.07 21:01 提问

LwIP收发问题 tcp_write 、tcp_receive 50C

最近做一个项目,无操作系统LwIP在stm32F4上面跑。网络数据接收一切都正常进行着,但是串口打印偶尔出现以下收发错误。
tcp_write: pbufs on queue => at least one queue non-empty at File:./lwip/core/tcp_out.c,Line:328
tcp_receive: valid queue length at File:./lwip/core/tcp_in.c,Line:1031

后续会悬赏20个金币。谢谢大神。

1个回答

mazihong
mazihong   2016.09.08 08:22

问题补充:详细的打印错误信息。
Assertion "tcp_receive: valid queue length" failed at line 1031 in ..\LWIP\lwip-1.4.1\src\core\tcp_in.c
Assertion "tcp_write: pbufs on queue => at least one queue non-empty" failed at line 328 in ..\LWIP\lwip-1.4.1\src\core\tcp_out.c
Assertion "tcp_receive: valid queue length" failed at line 1031 in ..\LWIP\lwip-1.4.1\src\core\tcp_in.c
Assertion "tcp_write: pbufs on queue => at least one queue non-empty" failed at line 328 in ..\LWIP\lwip-1.4.1\src\core\tcp_out.c
Assertion "tcp_receive: valid queue length" failed at line 1031 in ..\LWIP\lwip-1.4.1\src\core\tcp_in.c
Assertion "tcp_write: pbufs on queue => at least one queue non-empty" failed at line 328 in ..\LWIP\lwip-1.4.1\src\core\tcp_out.c

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
关于LWIP协议栈连续多次tcp_write后失败的解决过程
前段时间一直在调试lwip协议栈的问题,在stm32F107上实现一个C/S 架构的通信程序。项目初期的时候设计的是B/S架构的控制,然后在使用过程中发现了些限制,因为芯片自身的RAM有限,所以跑B/S的server端略显压力,为了处理类似动态网页内容,开辟一个5K的缓冲区,然后一次tcp_write就可以将内容发送给浏览器了,当然网页内容也是比较简单,考虑到后续可能会有更多的数据处理,故决定开发
LWIP中tcp_write函数的理解
LWIP中tcp_write函数的理解 对lwip协议的一些分析
【转载】笔记:无os的LwIP在TCP server历程中网络数据发送,串口出现tcp_write及tcp_receive错误。
做一个,串口收到数据然后通过tcp主动发送出去的东西,但是目前遇到以下问题,当tcp初始化后连接也建立好了,此时如果每即使毫秒就向串口扔一组数据,串口收到数据后主动发送tcp出去,但是如果发送频率很快(感觉100ms内的话)发个一段时间,程序就会死,debug了一下,死在了tcp_write_check函数里的断言这里 if (pcb->snd_queuelen != 0) {     L
[转载]关于LWIP协议栈连续多次tcp_write后失败的解决过程
前段时间一直在调试lwip协议栈的问题,在stm32F107上实现一个C/S 架构的通信程序。项目初期的时候设计的是B/S架构的控制,然后在使用过程中发现了些限制,因为芯片自身的RAM有限,所以跑B/S的server端略显压力,为了处理类似动态网页内容,开辟一个5K的缓冲区,然后一次tcp_write就可以将内容发送给浏览器了,当然网页内容也是比较简单,考虑到后续可能会有更多的数据处理,故决定开发
LWIP -- tcp_receive函数分析
1.调用流程:      tcp_input接收IP层递交上来的数据包,获取TCP首部长度(包括选项部分),将p指针移向pbuf的有效数据部分,     根据TCP报头,遍历tcp_active_pcbs链表,tcp_tw_pcbs链表,tcp_listen_pcbs链表,查找相应TCP控制块,     若在tcp_active_pcbs链表中匹配,调用tcp_process()。    
连续调用tcp_write函数,会导致系统崩溃
连续调用tcp_write函数,会导致系统崩溃 这个我昨晚纠结一晚了,不要用COPY标志,发送时等待资源, sndbuf_len 和 queuelen 。  最好发送一块数据,对方返回一个标识符再继续发送下一块  还有分块不要太大,否则都会死  总之,LWIP极其的不稳定,
lwip tcp_output源码解析
lwip tcp_output源码解析 err_t tcp_output(struct tcp_pcb *pcb) 说明: 找到能发送的数据-->发送 函数可能将某个连接的pcb控制块 字段unsent队列上的报文段发送出去,或者只发送一个ACK报文段。 如果调用该函数时,pcb的flags字段 TF_ACK_NOW标志置位并且没有数据发送,构建一个空的ACK段然后发送(原因:或者因为->unsent 队列是空或者窗口不允许); unsent 队列不为空 并且 窗口允许,发送带ACK的报文: 期间,有这样一
lwip编译选项
lwip编译选项 修改默认选项时,不要修改opt.h文件,通过lwipopts.h修改。 和内存管理以及TCP发送性能相关的选项 // 为1时使用系统库malloc/free进行内存管理 #ifndef MEM_LIBC_MALLOC #define MEM_LIBC_MALLOC 0 #endif // 使用mem_malloc/mem_free替代pool内存池
STM32 LWIP TCP以太网传输数据
最近在做以太网数据传输,要把AD采到的数据通过网口发送给上位机,我采用移植好的LWIP协议栈,实现了功能。做项目时间紧,也要先看一下LWIP协议栈,TCP  ,UDP传输协议。我采用的是TCP 数据传输,好处是传输可靠。直接贴代码,从main开始, int main(void) {    SystemInit();   System_Setup();   GpioLed_Init();
LWIP之TCP层接收相关 tcp_recv的实现(转)
标签: 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://bluefish.blog.51cto.com/214870/158416 既然定了这么个标题,当然是要从socket的recv来讲了。这里主要涉及到lwip_recvfrom这个函数。它的大致过程是,先通过netconn_recv(sock->conn);从net