380091044 发表于 2024-3-5 13:09:39

gentleman 发表于 2024-3-5 12:27
恢复C 只是 恢复到就绪列表

只有高优先级B 挂起自己,C才能运行

再次感谢老师

380091044 发表于 2024-3-5 13:48:20

gentleman 发表于 2024-3-5 12:24
A 运行 ->A阻塞 等500ms 后运行

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


刚好运行到C任务,500ms延时到,切换到任务A,A再次进入延时,这时B任务挂起,应该是接着运行C,有没有这种情况?

380091044 发表于 2024-3-5 13:49:55

tzz1983 发表于 2024-3-5 11:29
三个任务, 其中任务A是一个独立的任务,与任务B和C没有关系,任务A的优先级是最高,他用的是阻塞延时,作 ...

刚好运行到C任务,500ms延时到,切换到任务A,A再次进入延时,这时B任务挂起,应该是接着运行C,有没有这种情况?

380091044 发表于 2024-3-5 15:31:27

380091044 发表于 2024-3-5 13:49
刚好运行到C任务,500ms延时到,切换到任务A,A再次进入延时,这时B任务挂起,应该是接着运行C,有没有这 ...

好的,谢谢老师指点,

380091044 发表于 2024-3-8 14:58:51

tzz1983 发表于 2024-3-5 11:29
三个任务, 其中任务A是一个独立的任务,与任务B和C没有关系,任务A的优先级是最高,他用的是阻塞延时,作 ...

老师:再问一下,如果任务ABC三个都是阻塞式延时的话,是怎样的执行顺序呢?

380091044 发表于 2024-3-8 14:59:14

gentleman 发表于 2024-3-5 12:27
恢复C 只是 恢复到就绪列表

只有高优先级B 挂起自己,C才能运行

再问一下,如果任务ABC三个都是阻塞式延时的话,是怎样的执行顺序呢?

tzz1983 发表于 2024-3-8 15:21:50

本帖最后由 tzz1983 于 2024-3-8 15:52 编辑

380091044 发表于 2024-3-8 14:58
老师:再问一下,如果任务ABC三个都是阻塞式延时的话,是怎样的执行顺序呢? ...
当优先级顺序为ABC, 但是ABC任务阻塞时间是不一样的,多几个周期后就变成没有顺序,各玩各的。

假设起始条件是ABC任务都是就绪的:如下顺序
A阻塞 ->下一个优先级B
B阻塞 ->下一个优先级C
C阻塞 ->空闲任务(无就绪任务)
空闲->一旦有任务就绪(阻塞时间到),就切换至那个任务

总结:
1. 当前任务阻塞时,切换至下一个优先级最高并且就绪的任务, 如果没有就绪的任务则切换至空闲任务
2.一旦有比 当前任务 优先级更高的任务就绪,就是立即切换至高优先级的任务。
根据这两点你自行推理即可

比如说B在执行的时候,A就绪了就会抢占B,此时和刚开始时的A->B->C顺序就不一样了, 所以说它们没有顺序




380091044 发表于 2024-3-8 15:49:58

tzz1983 发表于 2024-3-8 15:21
当优先级顺序为ABC, 但是ABC任务阻塞时间是不一样的,多几个周期后就变成没有顺序,各玩各的。

假设起始 ...

感谢老师指点,我脑补一下,

tzz1983 发表于 2024-3-8 15:53:24

本帖最后由 tzz1983 于 2024-3-8 15:57 编辑

380091044 发表于 2024-3-8 15:49
感谢老师指点,我脑补一下,
其实大多数时候我们都不关心任务的执行顺序。只要响应及时就可以了。
比如例子中的三个任务 , 如果都改成阻塞,并且去掉挂起任务相关, A让LED闪烁,B让LED交替, C让LED走流水灯,你们自己玩自己的, 互不干涉, 不正是多任务OS追求的目标吗, 去找一找你有了三个CPU一样的那种感觉

当然也可以让任务之间有联系, 通信和同步, 这些关于信号量的,去了解一下, 前期建议你不要玩挂起任务相关的, 挂起任务这玩义用得少。前期玩还容易犯错


380091044 发表于 2024-3-8 16:23:42

tzz1983 发表于 2024-3-8 15:53
其实大多数时候我们都不关心任务的执行顺序。只要响应及时就可以了。
比如例子中的三个任务 , 如果都改成 ...

感谢老师引路,我也是STC官网找的一个框架在看,执行的顺序会影响到,任务之间的交叉,互动,互斥,我现在在用的裸机程序就是,一个状态发生变化了,播报语音就随之改变,另外一个语音开启时,可以打断前面语音,这样描述,就是大致意思,
页: 1 [2]
查看完整版本: UCOSII中执行B任务中,恢复C任务,是不是等于挂起B??