硬汉嵌入式论坛

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

[μCOS-III] usco3任务切换确认

[复制链接]

9

主题

26

回帖

53

积分

初级会员

积分
53
QQ
发表于 2024-12-30 23:38:29 | 显示全部楼层 |阅读模式
运行环境:ucos3


各位大佬,下面的场景我这边不太完全肯定。  不胜感激。
问题:
假设系统当前仅仅有有下面两个用户任务(不考虑系统任务),
请问在 task_a释放任务调度锁以后, do_something_a3函数有可能被task_b抢占吗?  还是完全没有可能。


task_a  优先级为 2

while(1){

    OSTimeDly();

    do_something_a1();

    OSSchedLock(&err);
    do_something_a2();
    OSSchedUnlock(&err);

    do_something_a3();//// 这个过程里面没有调用任何ucos-iii里的系统函数,都是用户自己代码

}




task_b  优先级为 3

while(1){

    OSTimeDly();

    do_something_b1();


}





回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116230
QQ
发表于 2024-12-31 09:27:06 | 显示全部楼层
对于uCOS3,

task_b  优先级为 3那么他是低优先级任务。不能去抢占优先级高2.
回复

使用道具 举报

9

主题

26

回帖

53

积分

初级会员

积分
53
QQ
 楼主| 发表于 2024-12-31 10:48:37 | 显示全部楼层
那么在释放任务锁的时候,主动触发调度,也完全没可能吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116230
QQ
发表于 2024-12-31 11:26:54 | 显示全部楼层
郭震2009 发表于 2024-12-31 10:48
那么在释放任务锁的时候,主动触发调度,也完全没可能吗?

你说的这种情况,低优先级不能抢占高优先级,除非高优先级任务释放CPU权限。
回复

使用道具 举报

21

主题

481

回帖

544

积分

金牌会员

积分
544
发表于 2024-12-31 16:49:17 | 显示全部楼层
郭震2009 发表于 2024-12-31 10:48
那么在释放任务锁的时候,主动触发调度,也完全没可能吗?

你的例子是释放任务锁,不等于释放CPU,高优先级任务不会被低优先级抢占的
如果用到Mutex,情况会复杂
回复

使用道具 举报

9

主题

26

回帖

53

积分

初级会员

积分
53
QQ
 楼主| 发表于 2024-12-31 19:45:21 | 显示全部楼层
谢谢各位大佬,看代码怕有遗漏。
那就可以明确得出,某个任务解开调度器引发的调度,并不一定会主动挂起当前任务,依然是寻找最高优先级的任务,如果本任务优先级最高,实际效果跟没操作调度器一样。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 22:36 , Processed in 0.237259 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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