严重!!! UCOS-II高级BUG..请帮忙~

[复制链接]
 楼主| Swd21ic 发表于 2009-7-23 22:22 | 显示全部楼层 |阅读模式
背景:&nbsp;平台STM32&nbsp;+&nbsp;uCOS2.86&nbsp;(移植为官方的最新版本)&nbsp;<br /><br />程序在某个中断调用OSQPost发送一消息队列&nbsp;&nbsp;<br /><br />任务A&nbsp;Pend该消息队列作为触发的条件.&nbsp;并使用pend得到的指针进行数据解析.&nbsp;<br />void&nbsp;TaskA&nbsp;(void&nbsp;*p_arg);&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;&nbsp;void&nbsp;*p_data;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;while&nbsp;(OS_TRUE)&nbsp;<br />&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p_data&nbsp;=&nbsp;(void&nbsp;*)OSQPend(g_DataQ,&nbsp;0,&nbsp;&err);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProcessData(p_data);&nbsp;<br />&nbsp;&nbsp;&nbsp;}&nbsp;<br />}&nbsp;<br />调试时发现在某种情况下.&nbsp;OSPendQ返回的指针是&nbsp;(void&nbsp;*)0;&nbsp;并且返回err&nbsp;==&nbsp;OS_ERR_NONE;&nbsp;表明此时是从消息指针数组中读到了空指针.&nbsp;<br />但此时消息指针数组中确确实实没有空指针的元素.&nbsp;&nbsp;<br /><br />更奇怪的是.&nbsp;&nbsp;<br />运行到这种情况下时(任务A&nbsp;Pend返回空指针).&nbsp;<br />当前任务块指针&nbsp;OSTCBCur&nbsp;确实是指向的任务A的任务控制块,但!!&nbsp;但OSPrioCur/OSPrioHigh却等于任务B的优先级(比任务A高).!!!!&nbsp;<br /><br />如果我没有理解错的话,&nbsp;这种情况是绝对不可能发生的...随便运行到哪个任务.&nbsp;OSPrioCur应当就是当前任务的优先级.~&nbsp;(任务B与任务A没有任何直接的关联)&nbsp;<br /><br />此BUG找了好几天了.今天才发现这个问题,感觉可能跟ucos任务切换有很大的关系.&nbsp;明明有高优先级的任务正处于就绪态.&nbsp;却切换到低优先级的任务A来了.&nbsp;<br />估计之前跟直接PendQ得到空指针有很大的关联..&nbsp;&nbsp;&nbsp;请大家帮忙看看有哪些可能.&nbsp;
 楼主| Swd21ic 发表于 2009-7-24 22:50 | 显示全部楼层

re

BUG已解决.&nbsp;是UCOS本身的问题
lonely8122 发表于 2009-7-25 08:42 | 显示全部楼层

说说看

我也用了一段时间了,没发现楼主说的问题啊
 楼主| Swd21ic 发表于 2009-7-25 18:49 | 显示全部楼层

ls

请见&nbsp;2.88&nbsp;的release&nbsp;note.官方已修正
lonely8122 发表于 2009-7-25 22:27 | 显示全部楼层

2.88版

我在www.micrium.com上只能找到v2.86,不知道v2.88在哪里下载?
bqt 发表于 2009-7-26 13:29 | 显示全部楼层

这个问题我也遇到过

<br />我遇到的情况也是一样的。<br /><br />通过仿真器可以看出,空闲任务竟然获得了最高优先级0,导致其它所有任务都切换不进去。当时我就觉得是ucosII在STM32上移植代码的问题,但是一直没有找出来,平台也是STM32&nbsp;+&nbsp;uCOS2.86&nbsp;(移植为官方的最新版本)&nbsp;。具体解决问题的方法还请楼主明示,谢谢!<br />
bqt 发表于 2009-7-26 13:39 | 显示全部楼层

最后导致不得不放弃在STM32上使用UCOS

问题出现时,OSPrioCur的确不是当前任务的优先级,我也想了很久一直没解决,官方的移植程序仔细看也没看出问题。但是问题就出在移植程序上,不知道楼主如何解决的?
bqt 发表于 2009-7-26 13:58 | 显示全部楼层

2.88版本没见到啊,官方网站没有

  
bqt 发表于 2009-7-27 10:59 | 显示全部楼层

找到了,不过官方网站上是没有的,呵呵

  
bqt 发表于 2009-7-27 11:02 | 显示全部楼层

原文是这样的

OS_CORE.C:&nbsp;<br /><br />OSIntExit()&nbsp;and&nbsp;OS_Sched()&nbsp;have&nbsp;changed&nbsp;slightly&nbsp;because&nbsp;of&nbsp;a&nbsp;boundary&nbsp;condition&nbsp;found&nbsp;with&nbsp;the&nbsp;Cortex-M3&nbsp;port.&nbsp;Specifically,&nbsp;we&nbsp;needed&nbsp;to&nbsp;move&nbsp;the&nbsp;statement:&nbsp;<br /><br />OSTCBHighRdy&nbsp;=&nbsp;OSTCBPrioTbl[OSPrioHighRdy];&nbsp;<br />&nbsp;<br />Before&nbsp;testing&nbsp;for&nbsp;the&nbsp;priority.&nbsp;<br /><br />
lonely8122 发表于 2009-7-27 15:26 | 显示全部楼层

没发现这个改动的作用

&nbsp;&nbsp;看了一会任务调度那部分的源代码,没发现这个改动会有什么作用啊,我也是使用2.86版,但没发现过优先级被打乱的情况,&nbsp;不知道这种情况是这么出现的?也许我的应用也有潜在的危险,希望遇到过这个问题的朋友指点下。
bqt 发表于 2009-7-27 23:05 | 显示全部楼层

任务切换频繁以及长时间运行程序时此问题可能出现

  
lonely8122 发表于 2009-7-28 08:28 | 显示全部楼层

能够具体解释一下出现此问题的原因?谢谢

  
bqt 发表于 2009-7-29 12:39 | 显示全部楼层

应该只是针对Cortex-M3的移植才会出现此问题

在其它体系结构上,如ARM7、ARM9上运行ucos2.86我还没发现此问题,我觉得应该和移植代码有关系,但是官方修改的是内核代码,而不是移植代码。此问题的原因比较细微,和Cortex-M3的中断机制有关。<br />
bqt 发表于 2009-7-29 12:47 | 显示全部楼层

或许换一种移植方式,此问题就不会出现

目前用到的大部分都是官方的移植,此移植程序非常简练,效率很高,充分利用到了Cortex-M3针对操作系统提供的硬件便利,但是不知道有没有经过全面的验证。或许换一种更保守的移植方式也可以解决问题,就是类似ARM7的移植方式。
lonely8122 发表于 2009-7-29 13:36 | 显示全部楼层

我用的就是cortex-m3

没有出现这个问题不说,而且也看不出来把OSTCBHighRdy&nbsp;=&nbsp;OSTCBPrioTbl[OSPrioHighRdy];&nbsp;放到if(OSPrioHighRdy&nbsp;!=&nbsp;OSPrioCur){}前面的作用。<br />
bqt 发表于 2009-7-29 21:09 | 显示全部楼层

我先前用也没出现问题,后来连续几个项目中遇到

一定要用仿真器才能看得出来,没遇到也正常,因为在一定条件下才能出现
foxqiu 发表于 2009-8-6 21:59 | 显示全部楼层
好问题。。。。。我没有遇到
headwolf_83 发表于 2009-8-8 22:40 | 显示全部楼层
是不是真的只有CM3会出问题。今天照着范例写了两个任务,每个任务闪一个LED灯,结果,每个任务的第一行代码,LED送1的代码都被执行了,而后续的清0代码确怎么都执行不了。真不知道是SIM的问题还是其它问题。
PIC32+UC/OS V2.86。
2个任务从不删除自己,一直跑,结果发现程序老是跑到空闲任务中,对一个新手,这样的事情太郁闷了。
headwolf_83 发表于 2009-8-8 22:40 | 显示全部楼层

问题解决了。

本帖最后由 headwolf_83 于 2009-8-9 10:02 编辑

改代码的时候,时钟初使化设置被我注释没了,所以总是不正常。老跑进空闲任务。现在搞定了。只是希望别出现LZ提到的BUG。现在可指望这个版本的官方移植来学习呢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

71

主题

781

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

71

主题

781

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部