野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9885|回复: 39

火哥《UC/OS-III应用开发指南》配套程序2.多任务(切换三个LED)发现bug

[复制链接]
发表于 2016-9-10 19:52:33 | 显示全部楼层 |阅读模式
41火花
本帖最后由 yimolijie 于 2016-9-20 19:41 编辑

修改前

修改前
1.png 20元求解。这是我的QQ1129993184。如题,火哥《UC/OS-III应用开发指南》配套程序2.多任务(切换三个LED)程序中,删除任意一任务的ostimedly(),程序将永远执行删除了ostimedly()函数的那个任务,并且永远不会去执行另外俩个任务。表现为:LED灯不会闪烁。理论上说另外两个任务的延时等待时间结束后,就可以继续执行任务了,可事实并没有。大家可以试一试,我和实验室的同学都没有发现错在那里。//*************-附件中,例程修改有:1,图中蓝色部分被注释掉;2. LEDb被配置为:led1--->PF6,  led2--->PF7,  led3--->PF8。除此外无任何修改********/@fire ..




2. 多任务(切换三个 LED).zip

7.42 MB, 下载次数: 55

回复

使用道具 举报

发表于 2016-12-26 10:01:18 | 显示全部楼层
1-因为使用的是抢占式调度,任务1因为没有调用阻塞延时函数来阻塞自己,任务2和3的优先级又跟任务1一样,所以并不能抢占任务1,所以任务1会一直执行,任务2和3永远得不到执行。

2-如果你把任务2和任务3的优先级设置的比任务1高,那就可以运行了

3-或者你打开相同优先级的时间片轮转功能,给任务1/2/3分配固定的时间片,一定要人为的分配时间片。

@yimolijie
回复

使用道具 举报

 楼主| 发表于 2016-9-10 19:55:03 | 显示全部楼层
本帖最后由 yimolijie 于 2016-9-10 20:25 编辑

@fire 补充:就是另外俩个调用的ostimedly()函数的任务,一直出于挂起状态,不论多久都无法恢复就绪状态--------附件中,LEDb被配置为:led1--->PF6,  led2--->PF7,  led3--->PF8,  

2. 多任务(切换三个 LED).zip

7.42 MB, 下载次数: 23

回复

使用道具 举报

发表于 2016-9-10 20:27:35 | 显示全部楼层
因为所在的任务优先级最高,它不休息,其它任务就没有机会被分配执行
回复

使用道具 举报

 楼主| 发表于 2016-9-10 20:49:56 | 显示全部楼层
flyleaf 发表于 2016-9-10 20:27
因为所在的任务优先级最高,它不休息,其它任务就没有机会被分配执行

三个任务优先级一样高的,你可以去下载火哥的这个列子程序来试试,我的师哥们说是移植有问题。谢谢你的回答
回复

使用道具 举报

 楼主| 发表于 2016-9-11 10:29:48 | 显示全部楼层
本帖最后由 yimolijie 于 2016-9-11 11:52 编辑

多大几个字,赚赚火花,提高悬赏,看有人回答没有
回复

使用道具 举报

 楼主| 发表于 2016-9-11 10:30:12 | 显示全部楼层
本帖最后由 yimolijie 于 2016-9-11 11:52 编辑

多大几个字,赚赚火花,提高悬赏,看有人回答没有
回复

使用道具 举报

 楼主| 发表于 2016-9-11 10:31:03 | 显示全部楼层
你们没有遇到这样的问题吗
,真的是他们的移植有问题吗
回复

使用道具 举报

 楼主| 发表于 2016-9-11 10:53:29 | 显示全部楼层
大家快来测试一下啊这个代码吧
回复

使用道具 举报

 楼主| 发表于 2016-9-11 10:55:21 | 显示全部楼层
怎么都没人来吗
回复

使用道具 举报

 楼主| 发表于 2016-9-11 10:57:40 | 显示全部楼层
快来个人吧,急急急啊
回复

使用道具 举报

 楼主| 发表于 2016-9-11 11:44:00 | 显示全部楼层
我来自嗨吗,怎么解决,用这个移植好的工程做导师的项目,做了这么多才发现这个问题,这下挤挤了
回复

使用道具 举报

 楼主| 发表于 2016-9-11 11:46:53 | 显示全部楼层
这破程序拿出来做例程,得害多少人啊
回复

使用道具 举报

 楼主| 发表于 2016-9-11 11:49:39 | 显示全部楼层
阿娇李开复的萨芬
回复

使用道具 举报

 楼主| 发表于 2016-9-11 11:50:07 | 显示全部楼层
快来帮我看啊看,没得就
回复

使用道具 举报

 楼主| 发表于 2016-9-11 11:51:08 | 显示全部楼层
多大几个字,赚赚火花,提高悬赏,看有人回答没有
回复

使用道具 举报

 楼主| 发表于 2016-9-11 11:51:45 | 显示全部楼层
多大几个字,赚赚火花,提高悬赏,看有人回答没有
回复

使用道具 举报

 楼主| 发表于 2016-9-11 11:52:27 | 显示全部楼层
多大几个字,赚赚火花,提高悬赏,看有人回答没有
回复

使用道具 举报

 楼主| 发表于 2016-9-11 11:52:48 | 显示全部楼层
多大几个字,赚赚火花,提高悬赏,看有人回答没有
回复

使用道具 举报

 楼主| 发表于 2016-9-11 19:25:42 | 显示全部楼层
多大几个字,赚赚火花,提高悬赏,看有人回答没有
回复

使用道具 举报

 楼主| 发表于 2016-9-11 22:11:55 | 显示全部楼层
多大几个字,赚赚火花,提高悬赏,看有人回答没有
回复

使用道具 举报

发表于 2016-9-20 00:11:00 来自手机 | 显示全部楼层
我也困扰了,优先级相同的任务怎么执行?是在一个while中延迟时执行另外一个?还是怎样?
回复

使用道具 举报

发表于 2016-9-20 07:05:10 | 显示全部楼层
ucosiii可以时间片轮,就算优先级相同也会切换任务。不知道我的理解对不。
回复

使用道具 举报

 楼主| 发表于 2016-9-20 19:41:05 | 显示全部楼层
ligen13872 发表于 2016-9-20 07:05
ucosiii可以时间片轮,就算优先级相同也会切换任务。不知道我的理解对不。

我猜是移植有问题,用原子的就不会出现这种问题,还有,就算你把没有加OSTimeDlyHMSM (0,0,0,500,OS_OPT_TIME_DLY ,&err);   这个函数的任务优先级设成最低,它还是会一直运行,。必须每个任务都加了这个延时函数他才会进行任务调度
回复

使用道具 举报

 楼主| 发表于 2016-9-20 19:41:45 | 显示全部楼层
yy98988988 发表于 2016-9-20 00:11
我也困扰了,优先级相同的任务怎么执行?是在一个while中延迟时执行另外一个?还是怎样?

优先级相同用时间轮转调度啊
回复

使用道具 举报

发表于 2016-9-25 19:24:35 | 显示全部楼层
timedly调用了一个函数把当前任务加入节拍链表,你删了,这个任务就取消了
回复

使用道具 举报

发表于 2016-9-30 15:11:35 来自手机 | 显示全部楼层
加油,挺你,我也有这个疑惑。
回复

使用道具 举报

发表于 2016-9-30 15:14:08 来自手机 | 显示全部楼层
yimolijie 发表于 2016-9-20 19:41
优先级相同用时间轮转调度啊

知道是时间轮转,但是野火的历程里面没有延时,那么同样优先级的其他任务就不执行
回复

使用道具 举报

 楼主| 发表于 2016-10-6 20:47:11 | 显示全部楼层
yy98988988 发表于 2016-9-30 15:14
知道是时间轮转,但是野火的历程里面没有延时,那么同样优先级的其他任务就不执行

ucouIII,不是ucouII,同样的程序,你去用用原子移植的模板试试,看看他会不会任务调度。我虽然不知道那个地方有错,但绝对有问题,相比其他人移植的ucosIII。
回复

使用道具 举报

发表于 2016-10-12 23:05:56 | 显示全部楼层
告诉你一个治标不治本的办法,将AppTaskLed2任务的优先级设置为20以上看看能不能解决这个问题
回复

使用道具 举报

 楼主| 发表于 2016-10-22 20:48:13 | 显示全部楼层
马贞茂 发表于 2016-10-12 23:05
告诉你一个治标不治本的办法,将AppTaskLed2任务的优先级设置为20以上看看能不能解决这个问题

请看清楚问题好吗?。我不是不能解决这个问题:只要每个任务都加加上延时函数就没有问题的。我是说他的东西有问题,这是在误人子弟。。。。
回复

使用道具 举报

发表于 2016-11-7 00:02:08 | 显示全部楼层
系统提供的延时函数会进行一次任务切换,要是没有延时函数,你的优先级设置又是比较高的话,那其他任务肯定是没法得到执行的,而原子的代码里边同优先级任务都加入了时间片轮调度的,自然也是可以执行的。要是你的代码里边不配置时间片轮的话,自然是会出现你说的问题的。所以在做任务的的时候,可以加入系统的延时函数来进行任务的切换,或者加入一个任务调度指令,问题应该就可以解决了
回复

使用道具 举报

发表于 2016-11-7 15:06:45 | 显示全部楼层
看了之后回去试了试,我的不存在你说的问题啊~~~我屏蔽任意一个或者两个的延时函数,其他的都照常运行~~~何解?
回复

使用道具 举报

发表于 2016-11-10 09:42:32 | 显示全部楼层
我三个任务,删掉一个任务的延时在相同优先级情况的话的确卡在删掉的那个,但是你把这个任务的优先级改低就好了啊。   优先级数字改高是优先级低,应该是你改错了
回复

使用道具 举报

发表于 2016-11-15 20:05:36 | 显示全部楼层
你同优先级的时间片轮换有打开吗?
回复

使用道具 举报

发表于 2016-12-25 22:59:45 | 显示全部楼层
我就问问 楼主这问题解决没
回复

使用道具 举报

发表于 2016-12-26 10:03:06 | 显示全部楼层
如果当时0809 发表于 2016-11-15 20:05
你同优先级的时间片轮换有打开吗?

楼主肯定没有                  
回复

使用道具 举报

发表于 2016-12-26 10:04:04 | 显示全部楼层
b_wolf 发表于 2016-11-7 00:02
系统提供的延时函数会进行一次任务切换,要是没有延时函数,你的优先级设置又是比较高的话,那其他任务肯定 ...

真正的原因看我36楼的解释
回复

使用道具 举报

发表于 2020-5-14 01:40:51 | 显示全部楼层
马贞茂 发表于 2016-10-12 23:05
告诉你一个治标不治本的办法,将AppTaskLed2任务的优先级设置为20以上看看能不能解决这个问题 ...

告诉你一个治本的方法  OS_TickTask()任务被uC/OS-III创建(通过配置OS_CFG_APP.H中的OS_CFG_TICK_TASK_PRIO), 其优先级是用户可配置的,因为用户自定义的任务优先级高于 OS_TickTask()的优先级,导致系统不能自动的切换任务。
回复

使用道具 举报

发表于 2020-5-14 01:41:32 | 显示全部楼层
马贞茂 发表于 2016-10-12 23:05
告诉你一个治标不治本的办法,将AppTaskLed2任务的优先级设置为20以上看看能不能解决这个问题 ...

告诉你一个治本的方法  OS_TickTask()任务被uC/OS-III创建(通过配置OS_CFG_APP.H中的OS_CFG_TICK_TASK_PRIO), 其优先级是用户可配置的,因为用户自定义的任务优先级高于 OS_TickTask()的优先级,导致系统不能自动的切换任务。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 08:00 , Processed in 0.047386 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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