搜索
bottom↓
回复: 21

困扰一年的关于ucos不能多OSQpost,单OSQPend的内核BUG修复方法

[复制链接]

出0入211汤圆

发表于 2014-5-16 17:03:36 | 显示全部楼层 |阅读模式
本帖最后由 hushaoxin 于 2014-5-17 14:52 编辑

曾经发过这两个帖子:
http://www.amobbs.com/thread-5580368-1-1.html
上面这个帖子没有人回复
http://www.amobbs.com/thread-5579618-1-1.html
上面这个帖子讨论很多,有网友表示遇到这个问题,但是最终也没有人回复

现象就是上面帖子所说的问题

这个问题我一年前就遇到,只是没有着手去解决,一直都是绕过去将就着用
治标解决方法有:
1、不使用这种多post单pend的结构(等于白说)
2、使用这种结构,但是pend后面加上调用延时1个或者多个周期就行
3、所有的post所在任务优先级高于pend就可以

今天从早上到公司来就开始再研究这个问题,花了整整一天,各种方法都试过,最后得出一个治标的方法如上面的方法2,本来就这样算了,但是强迫症患者,你懂的。
最后锁定在为什么延时1个周期后就能解决问题呢,找遍互联网,那本ucos的书都被翻烂了
废话少说,解决方法书:
修改os_core.c中
void  OSIntExit (void);
void  OS_Sched (void);
两个函数
将OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];这句话提前到if (OSPrioHighRdy != OSPrioCur) 这句话的前面

希望能帮助上各位,个人亲测没有问题

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

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入211汤圆

 楼主| 发表于 2014-5-17 14:56:14 来自手机 | 显示全部楼层
今天继续加压测试一天,三个post任务,周期分别是500uS、1mS、10ms,CPU利用率加到70%左右,测试一晚上一天,没有任何问题,以往只要半小时,甚至几分钟必挂,迟点我把此问题的来龙去脉,仔细写出来!

出0入0汤圆

发表于 2014-5-18 21:19:30 | 显示全部楼层
这难道是UCOS的BUG?

出0入211汤圆

 楼主| 发表于 2014-5-18 21:48:33 来自手机 | 显示全部楼层
SevenWans 发表于 2014-5-18 21:19
这难道是UCOS的BUG?

是的,从2.89版本后就修正了,但是这个只会在M3内核出现这个问题,由于M3内核的“咬尾”中断引起的

出100入101汤圆

发表于 2014-5-18 21:56:11 | 显示全部楼层
关注下,freertos是否存在同样问题?

出0入0汤圆

发表于 2014-5-18 22:04:50 | 显示全部楼层
hushaoxin 发表于 2014-5-18 21:48
是的,从2.89版本后就修正了,但是这个只会在M3内核出现这个问题,由于M3内核的“咬尾”中断引起的 ...

既然从2.89版本后就修正了,直接用新版的就行啦,为何不用呢?

出0入211汤圆

 楼主| 发表于 2014-5-18 23:05:21 来自手机 | 显示全部楼层
enovo2468 发表于 2014-5-18 22:04
既然从2.89版本后就修正了,直接用新版的就行啦,为何不用呢?

呵呵,一直用老版本,这么多年了没升级过,新版本的功能对我来说没什么大的意义,我一般升级软件都是因为老版本不能满足我的要求或者新版本有吸引我的功能,这个也是听网友说ucos2.89是m3内核专版,所以就仔细阅读该版本的代码找到的

出0入0汤圆

发表于 2014-5-19 00:27:39 | 显示全部楼层
“将OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];这句话提前到if (OSPrioHighRdy != OSPrioCur) 这句话的前面”

能事解释下为什么这样就能解决问题?

出0入0汤圆

发表于 2014-5-19 08:24:31 | 显示全部楼层
hushaoxin 发表于 2014-5-18 21:48
是的,从2.89版本后就修正了,但是这个只会在M3内核出现这个问题,由于M3内核的“咬尾”中断引起的 ...

没用过M3,不了解详情……我觉得你研究比较透彻啊,有时间可以给我们分析分析

出0入0汤圆

发表于 2014-6-18 13:31:52 | 显示全部楼层
MARK一下,最近在学习UCOS

出0入0汤圆

发表于 2014-6-19 07:00:39 来自手机 | 显示全部楼层
这个问题,大概4年前就提出了,确实是ucos在在cortex上的bug,官方早已修正。

出0入0汤圆

发表于 2014-6-19 16:45:49 | 显示全部楼层
楼主,我认真的查了一下。我现在使用的是2.52版本的UCOS-II,多处使用POST(中断 和 任务都有使用)另一个任务使用PEND 接收,但是系统没有出现你说的死机的现象啊!CPU是M3核的LPC1768

出0入0汤圆

发表于 2014-6-20 09:45:58 | 显示全部楼层
mark,看看

出0入36汤圆

发表于 2014-11-25 17:33:35 | 显示全部楼层
hushaoxin 发表于 2014-5-17 14:56
今天继续加压测试一天,三个post任务,周期分别是500uS、1mS、10ms,CPU利用率加到70%左右,测试一晚上一天 ...

报告老大,你方法我试了,没效果啊,我就是串口收到数据打印到PC,单个字节发送可以,多个就不行。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2015-5-12 15:46:34 | 显示全部楼层
如楼上很多人所说,这是老板本的bug,在ucos的版本更新中有说明。
bug不只是会在M3中,M0也有,要重现这种bug:需要post任务是中断服务函数中,即会 调用OSIntExit();
post优先级高于Pend,且频率比较高,便很容易出现Pend任务得不到运行。
系统死在空闲任务中。

出0入0汤圆

发表于 2015-5-13 08:57:00 | 显示全部楼层
学习了。标记下!

出0入0汤圆

发表于 2015-6-29 20:08:38 | 显示全部楼层
出其而亮 发表于 2015-5-12 15:46
如楼上很多人所说,这是老板本的bug,在ucos的版本更新中有说明。
bug不只是会在M3中,M0也有,要重现这种b ...

ATMEGA128上面出现此问题,
按此方法更改,测试,还会出现.
继续跟进中.

出0入0汤圆

发表于 2015-6-29 20:10:59 | 显示全部楼层
出其而亮 发表于 2015-5-12 15:46
如楼上很多人所说,这是老板本的bug,在ucos的版本更新中有说明。
bug不只是会在M3中,M0也有,要重现这种b ...

ATMEGA128上面出现此问题,
按此方法更改,测试,还会出现.
继续跟进中.

出0入0汤圆

发表于 2015-6-30 15:24:45 | 显示全部楼层
我好像前几天遇到这个问题了,回头测一下

出0入0汤圆

发表于 2015-6-30 15:29:08 | 显示全部楼层
出其而亮 发表于 2015-5-12 15:46
如楼上很多人所说,这是老板本的bug,在ucos的版本更新中有说明。
bug不只是会在M3中,M0也有,要重现这种b ...

我也遇到了这个问题,能提供下官方的解释吗?谢谢了

出0入0汤圆

发表于 2015-6-30 15:31:56 | 显示全部楼层
很久 以前也发现这个 当时以为自己水平有问题 最后也是用全局变量。。。

出0入0汤圆

发表于 2015-6-30 17:52:10 | 显示全部楼层
wq_601840968 发表于 2015-6-30 15:29
我也遇到了这个问题,能提供下官方的解释吗?谢谢了

Release Notes:https://doc.micrium.com/pages/viewpage.action?pageId=12851586
V2.88
Release date : 2009/01/21

This is a minor release as it contains only a few items that were not caught prior to releasing V2.87.

CHANGES

1)        OS_CORE.C:

            OSIntExit() and OS_Sched() have changed slightly because of a boundary condition found with the Cortex-M3 port. Specifically, we needed to move the statement:

OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];

Before testing for the priority.

2)        uCOS_II.H:

            The function prototype for OSEventPendMulti() incorrectly declared the timeout as an INT16U instead of an INT32U since we changed all time delays and timeouts to now use 32-bit values.

3)        All Files:

            Changed the way functions are declared to be consistent with the prototypes in ucos_ii.h.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 11:56

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

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