ucoii 低版本错误

  最近的设备出现了一个奇怪的现象,程序一直死在一个地方,但是看门狗却没有将其复位。单片机使用的是STM32F103,cortex-M3架构,经过调试发现只有一个任务在跑,其他任务均不运行,与ouravr论坛上现象几乎一样。

  论坛地址:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3474569&bbs_page_no=22&bbs_id=1000

  调试时发现在某种情况下. OSPendQ返回的指针是 (void *)0; 并且返回err == OS_ERR_NONE; 表明此时是从消息指针数组中读到了空指针. 
但此时消息指针数组中确确实实没有空指针的元素.  

更奇怪的是.  
运行到这种情况下时(任务A Pend返回空指针). 
当前任务块指针 O
STCBCur 确实是指向的任务A的任务控制块,但!! 但OSPrioCur/OSPrioHigh却等于任务B的优先级(比任务A高).!!!! 

如果我没有理解错的话, 这种情况是绝对不可能发生的...随便运行到哪个任务. OSPrioCur应当就是当前任务的优先级.~ (任务B与任务A没有任何直接的关联) 

 

操作系统版本:uCOS2.86 

在此帖子中,有人提到ucos-ii 2.88 release note中针对ucos cortex-m3的移植有改动描述,V2.87之前的代码有bug
      
目前我们的系统是ucos-ii 2.86,我下载到ucos-ii 2.88的源代码和用户手册,看到官方确实完善了内核代码。
 
      
在手册中官方写到
       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.

经过修正后,程序运行正常,不再出现任务切换的问题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值