搜索
bottom↓
回复: 11

RTT0.4在LPC17xx下也有TCP传输问题,同时收发时,发送线程挂起在邮箱或信号量的等待中

[复制链接]

出0入0汤圆

发表于 2011-11-24 14:19:27 | 显示全部楼层 |阅读模式
finsh正常,其他进程都正常,主要问题是邮箱满了后内核线程调度器失效。

单独收发都OK,但是双工通信时,发送就由接收驱动了,也就是有接收到数据包才调用发送线程。
我单步跟踪调试,发现邮箱满了后,挂起的进程不再调度。但是系统仍然可以正常进入IDLE进程和其他与TCP/IP协议栈不相关的进程。

采用信号量也有同样的问题。

采样BSP中LPC17XX未作任何修改的源程序编译NETIO进行测试,程序经常一遍都运行不完。而且也是每次都是上次接收完成后,后面的发送过程无法完成。

估计内核调度模块可能哪里有漏洞,或者LWIP的移植有问题。

斑竹可以在LPC17XX的板子上试试NETIO,多运行几次,问题是必现的。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2011-11-24 14:26:37 | 显示全部楼层
LPC17XX的驱动原来有个BUG,就是连续快速发送多个包,这样只会产生一个中断,因此多个包只释放一次信号量。
现已改用事件来解决这个问题。

SVN中已修正,请与SVN同步一下再测试。

出0入0汤圆

 楼主| 发表于 2011-11-24 14:30:51 | 显示全部楼层
版主这么快回复,赞!

我是从网站下的RTT0.4 RC1的代码,这个有问题么?

还没有用过SVN,试试看,呵呵。

再次感谢!

出0入0汤圆

发表于 2011-11-24 14:44:00 | 显示全部楼层
刚检查了,RC1中还未修正。

出0入0汤圆

 楼主| 发表于 2011-11-24 14:50:01 | 显示全部楼层
谢谢!
正在CHECKOUT中,保险起见把整个工程都弄下来,呵呵。

出0入0汤圆

发表于 2011-11-24 14:52:21 | 显示全部楼层
建议对比SVN与RC1的驱动,然后手动合并到你的项目中去。
而不要直接覆盖,不然你要是做过修改的话,可能会引起些其它问题。

出0入0汤圆

 楼主| 发表于 2011-11-24 14:59:46 | 显示全部楼层
谢谢提醒!

出0入0汤圆

 楼主| 发表于 2011-11-24 16:02:51 | 显示全部楼层
测试结果报告:
1.运行NETIO 5次,没有再挂掉。1K 报文速率为5KBPS左右,2K为1MBPS,2K以上均为20KBPS;
2.TCP服务器仍然会出现之前的情况,独立收发OK,但是收发同时进行时过一段时间发送进程就不再被系统调度,这时邮箱状态是满的。

感觉是收发同时进行时内核调度会局部失效,但是其他与TCPIP无关的进程却不受影响。

而且接受进程也正常运行,与其他模块的通信也正常,就是发送不行。

发送的进程接受邮件周期为8ms,每次发送2304BYTEs。

aozima帮忙想想后面该如何定位?

出0入0汤圆

 楼主| 发表于 2011-11-24 16:08:22 | 显示全部楼层
在发送进程内部调用系统tick函数,发现发送过程没有障碍,就是阻塞在邮箱等待过程中的。

而且这时候邮箱是满的,系统即使调度idle进程也不调度这个发送进程。。。

而且奇怪的是接收到一个报文后可以使发送进程得到调度,但也就运行几次就停了,然后再接受到一个包,又能发几个出去,感觉是被接受进程驱动。

出0入0汤圆

 楼主| 发表于 2011-11-25 16:24:31 | 显示全部楼层
进一步测试结果:
在finsh中用list_sem()发现发送的进程是阻塞在一个叫sem4的信号量上,但是这个信号量并不是我定义的。

于是通过在程序中嵌入list_sem()函数进行进行跟踪,最后定位到lwip_accept()--->netconn_accept()--->sys_arch_mbox_fetch()--->rt_mb_recv()函数上。

当TCP客户机没有发起连接的时候,这个信号量是没有的,accept之后就出现了。

此外,每次断开连接后,这个信号量的ID都不一样,按照sem4,sem5,sem6的规律编号递增。

一旦有接收到报文,一段时间后发送进程就阻塞在这个莫名其妙的信号量上了。

麻烦版主帮忙看看。

我的程序结构就是依照example里的tcpserver,在accept之后建立两个进程,一个发送一个接受,和其他的模块进行通信。我们公司信息安全原因不能贴上代码。。。自己手敲有点太多了,这样应该不妨碍问题分析吧?

出0入0汤圆

 楼主| 发表于 2011-11-30 23:58:46 | 显示全部楼层
问题解决!
采用的8041PHY没有配置为全双工模式。。。

出0入0汤圆

发表于 2011-12-1 11:31:07 | 显示全部楼层
回复【10楼】aureoleday  
问题解决!
采用的8041phy没有配置为全双工模式。。。
-----------------------------------------------------------------------
实际产品中,一般都要加上PHY中断,用于处理线路连接状态(有通断需要通知上层)。
以及速率和双工模式的改变。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-11 04:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表