bangbangji 发表于 2016-7-20 20:58:26

遇到问题,rt系统运行久了finsh线程好像就死了

最近发现搞的一个系统,在RT系统上做的软件,刚上电时finsh运行好好的,系统跑上几天后(时间不确定),finsh就不起作用了,没有任何反应,而同时其他线程都好好的运行着。
如果按下复位键重新运行,finsh又好了。。有遇到过的么?

zhanyanqiang 发表于 2016-7-20 21:22:18

刚开始学习RT,不清楚,帮顶~~~~希望有人出来解释一下,你学习的时候,把源码都看了吗?还是只看了如何应用的文档?

bangbangji 发表于 2016-7-20 21:41:11

zhanyanqiang 发表于 2016-7-20 21:22
刚开始学习RT,不清楚,帮顶~~~~希望有人出来解释一下,你学习的时候,把源码都看了吗?还是只看了如何应用 ...

目前也只在一两个项目上用过。只看了应用部分。源码没看。
不过这是个逐步深入的过程,用过了,就会慢慢对部分源码熟悉。比如我要用到软件定时器,就会大概看看相关的源码。

aozima 发表于 2016-7-21 00:52:27

可能有优先级高于finsh线程一直没有让出CPU。
可以暂时把fiinsh的优先级调为0,然后 list_thread() 列出所有线程看看有没有一直为ready的

security 发表于 2016-7-21 08:20:53

zhanyanqiang 发表于 2016-7-20 21:22
刚开始学习RT,不清楚,帮顶~~~~希望有人出来解释一下,你学习的时候,把源码都看了吗?还是只看了如何应用 ...

要先会用,而后再根据兴趣深入
换句话说,你要先知道 RTOS 的知识,先用起来。

security 发表于 2016-7-21 08:22:33

除了优先级问题,还有一个疑点,就是 FINSH 所依赖的设备是否正常,不要因为设备驱动问题,导致无法唤醒 FINSH。

bangbangji 发表于 2016-7-21 22:12:54

aozima 发表于 2016-7-21 00:52
可能有优先级高于finsh线程一直没有让出CPU。
可以暂时把fiinsh的优先级调为0,然后 list_thread() 列出所 ...

在哪里设?一直没找着。。

bangbangji 发表于 2016-7-21 22:17:26

security 发表于 2016-7-21 08:22
除了优先级问题,还有一个疑点,就是 FINSH 所依赖的设备是否正常,不要因为设备驱动问题,导致无法唤醒 FI ...

这个串口在finsh不能用的时候还能往外发东西,至于是不是接收部分挂了就不知道了。。。因为每复位一次要一两天以后才出现问题,暂时还无法验证。

security 发表于 2016-7-22 08:21:53

bangbangji 发表于 2016-7-21 22:12
在哪里设?一直没找着。。

你搜索一下 FINSH_THREAD_PRIORITY 的定义吧

security 发表于 2016-7-22 08:24:37

bangbangji 发表于 2016-7-21 22:17
这个串口在finsh不能用的时候还能往外发东西,至于是不是接收部分挂了就不知道了。。。因为每复位一次要 ...

你可以在接收时,做一些轻负担的、易观察的动作,例如让 LED 闪烁,就可以观察出串口接收是否还正常
期待你的最终答案~

bangbangji 发表于 2016-7-23 19:19:57

security 发表于 2016-7-22 08:24
你可以在接收时,做一些轻负担的、易观察的动作,例如让 LED 闪烁,就可以观察出串口接收是否还正常
期待 ...

目前已经确定是线程被阻塞了,我放了一个比finsh优先级低的LED闪烁线程,出故障时LED也不闪了。应该是被某个高优先级的线程把时间都占了。

duxingkei 发表于 2016-7-24 22:47:56

有意思!!!

我在玩wrtnode 里面的rtt好像也是出现类似现象,里面自己写了一个线程,刚运行时OK,过一段时间后,finsh (spi接口的)就死掉了,在wrtnode里面就没法都与rtt桥接的spi数据,没法激活finsh,估计也被阻塞了。我也弄个低于finsh的led线程试试!!!

bangbangji 发表于 2016-7-24 23:35:57

security 发表于 2016-7-22 08:24
你可以在接收时,做一些轻负担的、易观察的动作,例如让 LED 闪烁,就可以观察出串口接收是否还正常
期待 ...

目前发现新情况,比finsh优先级高的led能运行,而这个led与finsh的优先级之间没有其他线程。比它低的led无法运行。感觉还是finsh自己死了的样子。。。
目前还在实验。由于要很长时间才出一次,进展比较慢。

bangbangji 发表于 2016-7-24 23:36:14

duxingkei 发表于 2016-7-24 22:47
有意思!!!

我在玩wrtnode 里面的rtt好像也是出现类似现象,里面自己写了一个线程,刚运行时OK,过一段 ...

目前发现新情况,比finsh优先级高的led能运行,而这个led与finsh的优先级之间没有其他线程。比它低的led无法运行。感觉还是finsh自己死了的样子。。。
目前还在实验。由于要很长时间才出一次,进展比较慢。

a136498491 发表于 2016-9-1 20:59:58

不知道楼主试验怎么样了,估计得仔细检查里面的等待部分

flamma 发表于 2016-9-2 10:11:05

我之前也碰到过,后来没找出原因。导致我没敢把RT用在产品里。

bangbangji 发表于 2016-9-2 20:22:48

a136498491 发表于 2016-9-1 20:59
不知道楼主试验怎么样了,估计得仔细检查里面的等待部分

因为精力有限,没有深入下去。实际使用时直接禁用finsh了。。。问题应该在finsh这里,不用它的话LED闪的线程用很低的优先级也可以保持一直闪的状态。

34071417 发表于 2016-10-26 11:25:44

要不就是finsh内部有bug
页: [1]
查看完整版本: 遇到问题,rt系统运行久了finsh线程好像就死了