找回密码
 立即注册
查看: 1174|回复: 24

UCOSII中执行B任务中,恢复C任务,是不是等于挂起B??

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:498
  • 最近打卡:2025-05-02 07:00:13
已绑定手机

151

主题

589

回帖

1200

积分

金牌会员

积分
1200
发表于 2024-3-5 08:42:31 | 显示全部楼层 |阅读模式
本帖最后由 380091044 于 2024-3-5 08:43 编辑

UCOSII中执行B任务中,恢复C任务就开始执行C任务了,同时是不是等于挂起B??因为我发现:C执行结束时,又使用了恢复B任务函数,具体代码如下:
1.png
2.png
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:217
  • 最近打卡:2024-11-15 09:12:27

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 2024-3-5 08:57:39 | 显示全部楼层
任务B的最后一行



挂起了B自己

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2024-3-5 09:06:03 | 显示全部楼层
本帖最后由 tzz1983 于 2024-3-5 09:26 编辑

首先B的优先级比C高
OSTaskResume(4); 这个是恢复C, 但C没B优先高,所以继续执行B
到下一句: OSTaskSuspend(OS_PRIO_SELF); 时, B挂起自己, 此时B就不是最高优先级了,在此处转到任务C执行
到任务C的 OSTaskResume(3);语句时,恢复了任务B, 因为B比C的优先高, 所以立即切换至任务B, 如此循环住复。

想问题不要太复杂,一句就是一句的意思, “恢复C任务就开始执行C任务了” 这个理解是错误的,  “同时是不是等于挂起B” 这个理解也是错误的,挂起B在另外的一句
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:498
  • 最近打卡:2025-05-02 07:00:13
已绑定手机

151

主题

589

回帖

1200

积分

金牌会员

积分
1200
发表于 2024-3-5 11:03:15 | 显示全部楼层
本帖最后由 380091044 于 2024-3-5 11:05 编辑
tzz1*** 发表于 2024-3-5 09:06
首先B的优先级比C高
OSTaskResume(4); 这个是恢复C, 但C没B优先高,所以继续执行B
到下一句: OSTaskSusp ...

感谢老师的指点,我的理解偏差太大了,这个例程里面牵扯到三个任务分别是A、B、C,优先级分别是234即是我标的A2、B3、C4,其中,任务A的代码如下图所示,A是通过延时来切换到下一个任务(我的理解是B3),这三个任务切换关系,请老师指点一下,
3.png
4.png

点评

恢复C 只是 恢复到就绪列表 只有B挂起自己,C才能运行  详情 回复 发表于 2024-3-5 12:27
A 运行 ->A阻塞 等500ms 后运行 500ms内 B运行 -> B结束挂起自己(如果不挂起,C永远不执行) C运行 -> C恢复B 重复 第2~3 行直到500ms 500ms后 A 运行 ->A阻塞 等500ms 后运行  详情 回复 发表于 2024-3-5 12:24
三个任务, 其中任务A是一个独立的任务,与任务B和C没有关系,任务A的优先级是最高,他用的是阻塞延时,作用是每过0.5秒就让P22翻转。 阻塞 OSTimeDly() 这个概念明白吗,当任务遇到阻塞延时的时候,会切换任务。直  详情 回复 发表于 2024-3-5 11:29
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:498
  • 最近打卡:2025-05-02 07:00:13
已绑定手机

151

主题

589

回帖

1200

积分

金牌会员

积分
1200
发表于 2024-3-5 11:04:57 | 显示全部楼层
gentl*** 发表于 2024-3-5 08:57
任务B的最后一行

是的,
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2024-3-5 11:29:20 | 显示全部楼层
本帖最后由 tzz1983 于 2024-3-5 11:34 编辑
38009*** 发表于 2024-3-5 11:03
感谢老师的指点,我的理解偏差太大了,这个例程里面牵扯到三个任务分别是A、B、C,优先级分别是234即是我 ...

三个任务, 其中任务A是一个独立的任务,与任务B和C没有关系,任务A的优先级是最高,他用的是阻塞延时,作用是每过0.5秒就让P22翻转。

阻塞  OSTimeDly() 这个概念明白吗,当任务遇到阻塞延时的时候,会切换任务。直到延时的时间到了,OS会自动切换回来。
阻塞 和普通延时区别,阻塞不会停留到原地等待,就是阻塞发生时, CPU没有停留到原处,而是去执行别的任务去了。阻塞延时是基于OS时钟滴答的,时间到了,OS自动切换回来。
普通的延时(非阻塞) 比如Delay_MS(100) 这个就是非阻塞延时, 此时的CPU是一直原地打转,循环执行无意义的NOP指令。直到拖到延时的时间到。所以非阻塞延时是独占CPU的。

任务B和C的切换逻辑上一楼讲过了,要注意的是B和C都是使用非阻塞延时,B和C是轮流执行的。B让P1口的LED交替闪烁, C让P3口的LED走流水灯样式。三个任务就是这样了

另外要注意的是,虽然B和C都是独占CPU, 但是不会影响任务A, 因为A的优先级是最高的, 只要延时时间到, 就是立即获得即行权。反转P22
并且因为A使用的是阻塞延时,实际执行代码的时间非常短,几乎可以忽略不计, 所以任务A不也不影响B和C


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:217
  • 最近打卡:2024-11-15 09:12:27

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 2024-3-5 12:24:03 | 显示全部楼层
38009*** 发表于 2024-3-5 11:03
感谢老师的指点,我的理解偏差太大了,这个例程里面牵扯到三个任务分别是A、B、C,优先级分别是234即是我 ...

A 运行 ->A阻塞 等500ms 后运行

500ms内  B运行  -> B结束挂起自己(如果不挂起,C永远不执行)
               C运行 -> C恢复B
               重复 第2~3 行直到500ms
500ms后 A 运行 ->A阻塞 等500ms 后运行
              回到第2行 B运行


回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:217
  • 最近打卡:2024-11-15 09:12:27

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 2024-3-5 12:27:52 | 显示全部楼层
本帖最后由 gentleman 于 2024-3-5 12:28 编辑
38009*** 发表于 2024-3-5 11:03
感谢老师的指点,我的理解偏差太大了,这个例程里面牵扯到三个任务分别是A、B、C,优先级分别是234即是我 ...

恢复C 只是 恢复到就绪列表

只有高优先级B 挂起自己,C才能运行
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:498
  • 最近打卡:2025-05-02 07:00:13
已绑定手机

151

主题

589

回帖

1200

积分

金牌会员

积分
1200
发表于 2024-3-5 13:08:17 | 显示全部楼层
tzz1*** 发表于 2024-3-5 11:29
三个任务, 其中任务A是一个独立的任务,与任务B和C没有关系,任务A的优先级是最高,他用的是阻塞延时,作 ...

感谢老师的鼎力支持,明白了,
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:498
  • 最近打卡:2025-05-02 07:00:13
已绑定手机

151

主题

589

回帖

1200

积分

金牌会员

积分
1200
发表于 2024-3-5 13:09:09 | 显示全部楼层
gentl*** 发表于 2024-3-5 12:24
A 运行 ->A阻塞 等500ms 后运行

500ms内  B运行  -> B结束挂起自己(如果不挂起,C永远不执行)

感谢老师的指点,让我对这个有了更深入了解,
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 11:18 , Processed in 0.162831 second(s), 118 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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