STM32F207+uCOS II 任务调度的问题

在STM32F207使用uCOS II V2.85+LWIP进行开发时,遇到网口数据接收中断导致的任务调度问题。经过排查,发现OSPrioCur与OSTCBCur->OSTCBPrio不一致,为uCOS II本身的bug。解决方案是在OS_Sched()和OSIntExit()中修正OSPrioCur值,或者升级到V2.88及以上版本,问题得到解决。
摘要由CSDN通过智能技术生成

    是的,这个问题纠缠了我一个多月,我都要崩溃了放弃了。今天还是在互联网上找到了答案,太感谢发帖的人了。抑郁的情怀终于得到释放,啦啦啦~~

    平台:STM32F207+uCOS II V2.85+LWIP

   问题:网口接收到数据来中断时,通过OSSemPost告知任务进行处理。只要接网口,有网口数据接收,不管是否发送,运行一段时间后任务调度就会出问题。STM32F207自带网口有这个问题,扩展的DM9000也有这个问题,而且DM9000更容易出现。修改代码调试定位,有的时候十分钟出现,有的时候跑两个小时出现,有的时候跑一个晚上出现,或一个周末出现。出问题之后,只有一个任务在跑,再也调度不起来了。

    跟踪发现OSPrioCur和OSTCBCur->OSTCBPrio不相等。但是这两个值都是在PendSV_Handler中赋值,赋值前后有中断保护。理论上两者不应该不等呀。一直定位定位,屏蔽这个屏蔽那个,以为好了,久了问题又来。最终没有办法,自己打了个补丁。在OS_Sched()和OSIntExit()里加上语句:if (OSPrioCur != OSTCBCur->OSTCBPrio) OSPrioCur = OSTCBCur->OSTCBPrio;

    加上补丁后,运行起来倒是相安无事,只是我放不下心啊,担心是网口驱动引起的问题,像是个定时炸弹。今天在网上继续搜索,终于找到答案,泪奔啊!

    原来是uCOS II本身的bug,V2.88以后的版本改正了这个任务调度的bug。

        OSTCBHighRdy = OSTCBPrioTbl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值