硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3772|回复: 11
收起左侧

[μCOS-III] UCOSIII任务优先级相同的问题

[复制链接]

98

主题

340

回帖

634

积分

金牌会员

积分
634
发表于 2020-4-8 11:43:05 | 显示全部楼层 |阅读模式
请教硬汉哥,UCOSIII没有使能时间片轮转,但发现程序中有相同优先级的任务,这样会有啥问题吗?看任务调度的源码,如下,OSPrioHighRdy这个变量应该就是任务的优先级吧,那两个任务优先级一样它如何识别呢?
OSPrioHighRdy   = OS_PrioGetHighest();                  /* Find highest priority                                  */
OSTCBHighRdyPtr = OSRdyList[OSPrioHighRdy].HeadPtr;     /* Get highest priority task ready-to-run                 */



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107157
QQ
发表于 2020-4-8 11:51:11 | 显示全部楼层
会有一个不执行。
回复

使用道具 举报

98

主题

340

回帖

634

积分

金牌会员

积分
634
 楼主| 发表于 2020-4-8 13:23:32 | 显示全部楼层
eric2013 发表于 2020-4-8 11:51
会有一个不执行。

不会啊,我把3个任务的优先级改的都一样,仿真发现每个任务都可以被调度到。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107157
QQ
发表于 2020-4-8 13:28:56 | 显示全部楼层
云琴箫龙 发表于 2020-4-8 13:23
不会啊,我把3个任务的优先级改的都一样,仿真发现每个任务都可以被调度到。

你都没有使能时间片调度,同优先级任务还执行,岂不是uCOS-III异常了。。。
回复

使用道具 举报

98

主题

340

回帖

634

积分

金牌会员

积分
634
 楼主| 发表于 2020-4-8 14:32:01 | 显示全部楼层
eric2013 发表于 2020-4-8 13:28
你都没有使能时间片调度,同优先级任务还执行,岂不是uCOS-III异常了。。。

os_cfg.h中时间片这个宏确实没开,所以很怪异的问题,我再好好研究一下它怎么调度的
#define OS_CFG_SCHED_ROUND_ROBIN_EN     0u   /* Include code for Round-Robin scheduling      
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107157
QQ
发表于 2020-4-8 16:49:28 | 显示全部楼层
云琴箫龙 发表于 2020-4-8 14:32
os_cfg.h中时间片这个宏确实没开,所以很怪异的问题,我再好好研究一下它怎么调度的
#define OS_CFG_SCH ...

如果你没有开,直接就退出去了
QQ截图20200408164915.png
回复

使用道具 举报

98

主题

340

回帖

634

积分

金牌会员

积分
634
 楼主| 发表于 2020-4-8 18:07:56 | 显示全部楼层
eric2013 发表于 2020-4-8 16:49
如果你没有开,直接就退出去了

把四个任务优先级都改成了3,无论是仿真还是实际测试,3个任务都在正常运行......
PS:顺便请教一下,uC/OS-III Timer Task调度锁定时间为红色“33.61”,看到红色觉得它不正常,请问这个调度锁定时间是什么意思?
QQ截图20200408180232.bmp
回复

使用道具 举报

98

主题

340

回帖

634

积分

金牌会员

积分
634
 楼主| 发表于 2020-4-8 18:13:32 | 显示全部楼层
eric2013 发表于 2020-4-8 16:49
如果你没有开,直接就退出去了

时间片相关的函数仿真时候前面都是没有灰度的,说明确实也不会运行这些代码。
QQ截图20200408181217.bmp
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107157
QQ
发表于 2020-4-8 18:58:07 | 显示全部楼层
云琴箫龙 发表于 2020-4-8 18:13
时间片相关的函数仿真时候前面都是没有灰度的,说明确实也不会运行这些代码。

看了下uCOS-III的源码,的确是没有限制,也就是说它仅仅是表示不再使用时间片调度了。

但是同优先级任务还可以继续执行,这个是类似FreeRTOS,RTX里面的一种合作式调度方式,也是同优先级下这几个任务是逐次执行的,不再按照时间片方式处理。
回复

使用道具 举报

98

主题

340

回帖

634

积分

金牌会员

积分
634
 楼主| 发表于 2020-4-10 09:11:06 | 显示全部楼层
嗯,似乎是执行固定时间后强制切换到另一个任务
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107157
QQ
发表于 2020-4-10 09:55:51 | 显示全部楼层
云琴箫龙 发表于 2020-4-10 09:11
嗯,似乎是执行固定时间后强制切换到另一个任务

这个是因为你的同优先级任务里做了释放CPU权限的操作。

对于这种合作式调用,你可以做个这种测试,这几个同优先级任务里面,你不做任务释放CPU权限类的操作,就只有一个任务会执行,你可以试试。
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2022-6-23 13:55:20 | 显示全部楼层
赞 刚好研究这个
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-20 23:29 , Processed in 0.192429 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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