试用RT-Thread,看门狗进程出问题,请各位高手帮忙分析一下。
觉得RT-Thread做得真不错,打算在某项目使用,现在是在试验OS的稳定性。运行环境:LM3S8938;
开了一个http server进程,一个TCP server进程和一个看门狗进程(详见附件);
运行一天后(TCP server一直有数据收发),多数情况TCP server及 http server进程都没有问题,看门狗进程却会死掉,进程信息如下:
threadpristatus sp stack size max used left tickerror
-------- ---- ------- ---------- ---------- ---------- ---------- ---
tcpip 0x0c suspend 0x000000b0 0x00000400 0x000001a8 0x0000000b 000
tidle 0x1f ready 0x00000050 0x00000100 0x00000050 0x00000012 000
tshell 0x14 ready 0x00000220 0x00000800 0x000002fc 0x0000005d 000
wdt 0x1e ready 0x00000060 0x00000080 0x00000060 0x00000001 -02
tcps 0x18 ready 0x00000098 0x00000400 0x00000160 0x00000014 000
https 0x19 suspend 0x00000110 0x00000400 0x00000160 0x00000013 000
etx 0x0d suspend 0x00000080 0x00000200 0x00000080 0x0000000c 000
erx 0x0d suspend 0x00000080 0x00000200 0x000000c0 0x00000001 000
第二次死
tcpip 0x0c suspend 0x000000b0 0x00000400 0x00000198 0x0000000f 000
tidle 0x1f ready 0x00000050 0x00000100 0x00000050 0x00000001 000
tshell 0x14 ready 0x000002e8 0x00000800 0x000002fc 0x0000005d 000
wdt 0x1e ready 0x00000060 0x00000080 0x00000068 0x00000002 -02
tcps 0x18 ready 0x00000158 0x00000400 0x00000160 0x0000000e 000
https 0x19 suspend 0x00000110 0x00000400 0x00000114 0x00000014 000
etx 0x0d suspend 0x00000080 0x00000200 0x00000088 0x0000000b 000
erx 0x0d suspend 0x00000080 0x00000200 0x000000c8 0x00000010 000
有一次网络未连接(TCP server)未进行数据收发,一天后shell死掉了,看门狗的时间慢了5~10倍
请各位高手分析分析。
用户进程初始化ourdev_555566.rar(文件大小:3K) (原文件名:application.rar) 还有一个问题就是为啥看门狗程序用的堆栈大小不是固定的?有时多4~8字节 没有发现wdg线程死掉呢.有关error=-2的情况见http://www.rt-thread.org/drupal/node/5 "看门狗的时间慢了5~10倍 "
这个是什么意思?
那个堆栈,多8个字节挺奇怪的。具体压多少栈,这个实际上不是确定的,例如发生抢占的地方不同。但是跑的时间长了以后,数目应该一致才是。 谢谢各位啊
从表面看看门狗是没有死掉,实际灯已经不闪了;那个-2的错误也会一直存在,不像http://www.rt-thread.org/drupal/node/5 所说的情况。
"看门狗的时间慢了5~10倍 " 正常是0.4秒变化一次IO电平;有一次出问题后灯闪的速度3~4秒(目测); 备注:看门狗实际输出没有使能到CPU,所以CPU并没有复位,也就是说看门狗任务仅仅是对两个IO进行电平变化操作,具体可见源代码。
因为这个程序非常简单,所以我也很纳闷 shaolin,你在lm3s的开发板上看看能否复现。 死机的原因应该是我close了两次socket;
但跟踪进去第二次close是识别到错误的,不知道为啥还是会死掉;
另外发现另一个问题,第一次连接使用了5999端口,断开后重新用5999端口无法连接,什么原因? 呃,居然没有关注到这贴,晚上我在我这边尝试复现下 回复【7楼】migrant
死机的原因应该是我close了两次socket;
但跟踪进去第二次close是识别到错误的,不知道为啥还是会死掉;
另外发现另一个问题,第一次连接使用了5999端口,断开后重新用5999端口无法连接,什么原因?
-----------------------------------------------------------------------
楼主是否能将这部分代码贴出来,我这边一直没有能够复现这个现象。 回复【9楼】shaolin
-----------------------------------------------------------------------
点击此处下载 ourdev_559116.rar(文件大小:1K) (原文件名:tcpserver.rar)
点击此处下载 ourdev_559117.zip(文件大小:1023K) (原文件名:TCPUDPDebug_Setup.zip)
不好意思啊,漏了一个文件;
tcpserver.c的86行中打开,用周立功的tcp调试工具连接后再断开就会出错;
86行注释掉之后断开连接就不会出错,但不能用之前的端口号重新连接 死机的原因应该是我close了两次socket;
但跟踪进去第二次close是识别到错误的,不知道为啥还是会死掉;
另外发现另一个问题,第一次连接使用了5999端口,断开后重新用5999端口无法连接,什么原因?
--------------------------------------------------------------------------------------
我这边也复现了这个现象,使用一个端口,用lwip_close断开后再立刻重新连接会失败,但是过几秒钟后再连接又能成功。
这个应该是正常现象,使用lwip_close断开这个端口的连接后,这个连接会进入time wait状态,这种状态会持续几秒钟,这这种状态下去重新连接会失败。 这个是正常现象的,在PC上也是这样。 谢谢,close两次后死机的现象有没有复现? 关于使用同一个端口连接的问题,我这里好像跟电脑有关,等待很长时间再连接也不成功,试了以下几个方法都是无法连接:
1.断开网线再插上
2.重启电路板
3.修复电脑的网络
4.禁用电脑网络再启用
只有更改了电脑的IP(比如删除网关IP,删除某个不在一个网段的IP)之后就可以连接了。
页:
[1]