野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 22911|回复: 2

uC/OS-III互斥量试验效果不一致的疑惑

[复制链接]
发表于 2019-6-8 17:33:17 | 显示全部楼层 |阅读模式
有没有老哥在用火哥的那本uC/OS-III的书籍?我在学习到互斥量使用的时候根据书本的教程编出来的程序在串口调试助手打印的效果没有达到书本上的那样,即使拷贝了app.c中的源码进行测试也是一样的效果,
但是使用火哥在配套教程里面的原汁原味的源码就可以出来课本的效果,为了防止自己是在移植中产生的错误,我就拿配套历程的模板加上了自己写的代码再做了一次测试,但是还是没有达到预期的效果,请大佬们指点一二,感激不尽

我的实验效果截图

我的实验效果截图

火哥的试验效果截图

火哥的试验效果截图
回复

使用道具 举报

 楼主| 发表于 2019-6-8 17:34:18 | 显示全部楼层
给自己顶一下
回复 支持 反对

使用道具 举报

发表于 2019-8-22 22:45:31 | 显示全部楼层
通过文本比较软件对比发现,os_cfg_app.h文件中时钟节拍任务的优先级设置低了,uC/OS-III源码中时钟节拍任务默认的优先级是10,而火哥的例程中设置的是1,把这个任务的优先级提高了,不然OS运行的时候时钟节拍任务会因为优先级太低而运行不到。
火哥的例程也有点问题,如第二幅图中,出现了AppTaskLed1获取互斥量后紧接着AppTaskLed3又获取到了互斥量,释放互斥量也出现了这样的问题,违背了互斥量资源独占的特点,其实这只是因为printf函数放置的位置的问题,把printf函数放在等待互斥量函数和释放互斥量函数之间即可,这样就不会出现串口打印出两个任务都获取到互斥量的情况。
最后,我也有一个问题没弄明白,AppTaskLed1是三个任务中优先级最低的任务,但当AppTaskLed1任务获取到互斥量后应该会暂时提高它的任务优先级,但为什么还会被原本比它高一个优先级的AppTaskLed2任务抢占CPU的使用权?
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-12-6 06:54 , Processed in 0.046123 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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