恢复C 只是 恢复到就绪列表
只有高优先级B 挂起自己,C才能运行
再次感谢老师 gentleman 发表于 2024-3-5 12:24
A 运行 ->A阻塞 等500ms 后运行
500ms内B运行-> B结束挂起自己(如果不挂起,C永远不执行)
刚好运行到C任务,500ms延时到,切换到任务A,A再次进入延时,这时B任务挂起,应该是接着运行C,有没有这种情况? tzz1983 发表于 2024-3-5 11:29
三个任务, 其中任务A是一个独立的任务,与任务B和C没有关系,任务A的优先级是最高,他用的是阻塞延时,作 ...
刚好运行到C任务,500ms延时到,切换到任务A,A再次进入延时,这时B任务挂起,应该是接着运行C,有没有这种情况? 380091044 发表于 2024-3-5 13:49
刚好运行到C任务,500ms延时到,切换到任务A,A再次进入延时,这时B任务挂起,应该是接着运行C,有没有这 ...
好的,谢谢老师指点, tzz1983 发表于 2024-3-5 11:29
三个任务, 其中任务A是一个独立的任务,与任务B和C没有关系,任务A的优先级是最高,他用的是阻塞延时,作 ...
老师:再问一下,如果任务ABC三个都是阻塞式延时的话,是怎样的执行顺序呢? gentleman 发表于 2024-3-5 12:27
恢复C 只是 恢复到就绪列表
只有高优先级B 挂起自己,C才能运行
再问一下,如果任务ABC三个都是阻塞式延时的话,是怎样的执行顺序呢? 本帖最后由 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顺序就不一样了, 所以说它们没有顺序
tzz1983 发表于 2024-3-8 15:21
当优先级顺序为ABC, 但是ABC任务阻塞时间是不一样的,多几个周期后就变成没有顺序,各玩各的。
假设起始 ...
感谢老师指点,我脑补一下, 本帖最后由 tzz1983 于 2024-3-8 15:57 编辑
380091044 发表于 2024-3-8 15:49
感谢老师指点,我脑补一下,
其实大多数时候我们都不关心任务的执行顺序。只要响应及时就可以了。
比如例子中的三个任务 , 如果都改成阻塞,并且去掉挂起任务相关, A让LED闪烁,B让LED交替, C让LED走流水灯,你们自己玩自己的, 互不干涉, 不正是多任务OS追求的目标吗, 去找一找你有了三个CPU一样的那种感觉
当然也可以让任务之间有联系, 通信和同步, 这些关于信号量的,去了解一下, 前期建议你不要玩挂起任务相关的, 挂起任务这玩义用得少。前期玩还容易犯错
tzz1983 发表于 2024-3-8 15:53
其实大多数时候我们都不关心任务的执行顺序。只要响应及时就可以了。
比如例子中的三个任务 , 如果都改成 ...
感谢老师引路,我也是STC官网找的一个框架在看,执行的顺序会影响到,任务之间的交叉,互动,互斥,我现在在用的裸机程序就是,一个状态发生变化了,播报语音就随之改变,另外一个语音开启时,可以打断前面语音,这样描述,就是大致意思,
页:
1
[2]