OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10928|回复: 7

ucos-ii v2.91 for ALIENTEK MiniSTM32

[复制链接]

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
发表于 2012-7-25 13:59:38 | 显示全部楼层 |阅读模式
之前看到一篇文章:

uC/OS内核程序错误修改记录

相关文件名:OS_MUTEX.C

函数名:OS_EVENT  *OSMutexCreate (INT8U prio, INT8U *err)

改动原因:

内核在创建互斥信号量的函数OSMutexCreate中,由于数据类型不匹配产生了PIP参数不能保存的错误。

在函数OSMutexCreate创建一个互斥信号量时,调用函数传递一个PIP作为函数实参(PIP是优先级继承优先级,其作用是利用互斥信号量解决多任务系统中可能出现的优先级反转问题。即把占用共享资源的低优先级任务的优先级暂时提高到PIP,等其释放共享资源后再恢复到原来的优先级)。函数OSMutexCreate将实参prio保存到.OSEventCnt的高八位。由于prioINT8U数据类型的变量,其长度是八位,prio左移八位后就等于0。所以应该将prio强制转换为16位类型的数据,再左移8位,然后与0xFF相“或”并保存到.OSEventCnt

下图表示OSMutexCreate返回的事件控制块ECB的数据结构。


改动前后的程序对比:

改动前:  

OS_EVENT  *OSMutexCreate (INT8U prio, INT8U *err)

{

….

  pevent->OSEventCnt  = (prio << 8) | OS_MUTEX_AVAILABLE;

//由于prio是八位,左移八位后就等于0

pevent->OSEventPtr  = (void *)0;   

… 

改动后:

OS_EVENT  *OSMutexCreate (INT8U prio, INT8U *err)

{

 INT16U pip = (INT16U) prio;   //强制类型转换

 ….

 pevent->OSEventCnt  = (pip << 8) | OS_MUTEX_AVAILABLE;

 //pip的低八位左移到高八位并保存到OSEventCnt

 pevent->OSEventPtr  = (void *)0;

….

内核错误发现的经过和背景:

       我们在做可行性系统测试时,利用互斥信号量来保证驱动程序对资源的独占访问(参见“四、多任务系统中驱动程序实现的问题和方法”)。测试系统在main函数中成功创建了一个MUTEX,并传递了PIP3的参数值。同时测试系统创建了一个优先级为0级的任务,这个任务运行一次后就调用OSTaskDel(OS_PRIO_SELF)将自己删除。任务将自己删除以后操作系统应该永远不会再调度该任务(参见uC/OSII书籍),可是测试发现这个优先级为0的任务继续运行。通过调试跟踪发现,调用OSMutexCreate函数创建MUTEX时,传递的PIP参数值(值为3)没有被函数保存到ECB结构中,而是将0保存到ECB中,从而使操作系统认为创建MUTEX时传递了PIP0 的参数。这样,在后面调用OSMutexPend的函数中将优先级为0的任务又改变成就绪状态并得以继续运行,使uC/OSII操作系统出现了调度错误。 这个错误在uC/OSII后续的版本中做了修改。例如V2.88就没有这个问题。


========================================================================================================
于是将原子的ucosii v2.52升级到v2.91。
应用示例程序与http://www.openedv.com/posts/list/5268.htm相同。







uCOS-II V2.91 for ALIENTEK MiniSTM32 .zip

2.6 MB, 下载次数: 1134

永远保持一颗学习的心态。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-7-25 18:38:10 | 显示全部楼层
回复 支持 反对

使用道具 举报

38

主题

292

帖子

1

精华

高级会员

Rank: 4

积分
614
金钱
614
注册时间
2012-7-6
在线时间
0 小时
发表于 2012-7-31 15:38:58 | 显示全部楼层
好帖子!就应该顶起来
STM32F3系列公司现有货供应!STM32F0,STM32F2,STM32F3,STM32F4 银洋电子专业一级代理http://www.y-ec.com 联系电话:021-53086303  淘宝网:http://y-ec.taobao.com
回复 支持 反对

使用道具 举报

14

主题

173

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
256
金钱
256
注册时间
2011-10-14
在线时间
2 小时
发表于 2012-8-1 09:36:24 | 显示全部楼层
谢谢分享,下载~
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-8-1 11:21:18 | 显示全部楼层
回复【楼主位】科科1987:
---------------------------------
问问楼主,2.91的稳定性如何啊?我已经打算把2.52全部更新为2.91了...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
 楼主| 发表于 2012-8-1 14:53:53 | 显示全部楼层
原子哥,目前没有发现不稳定的现象。附件是版本说明。

ReleaseNotes.PDF

769.12 KB, 下载次数: 231

永远保持一颗学习的心态。
回复 支持 反对

使用道具 举报

3

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
232
金钱
232
注册时间
2012-5-31
在线时间
71 小时
发表于 2012-11-28 12:34:02 | 显示全部楼层
有3.5的库?
回复 支持 反对

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
 楼主| 发表于 2012-12-14 22:24:50 | 显示全部楼层
回复【7楼】834492956:

有3.5的库?

---------------------------------
没有···
永远保持一颗学习的心态。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-19 12:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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