在下遇到的问题是这样的:
在嵌入式操作系统中,建立两个不同优先级任务,每个任务最初要求是分别运行0.2s,高优先级的先运行。
当出现以下情况时:
先运行的高优先级任务提前运行完了——即在0.2s时限到来之前完成既定任务
则:
剩余的时间等待,直到0.2s耗完,再进行第二个任务
当出现以下情况时:
先运行的高优先级任务在0.2s时限到来之时还没有运行完
则:
则系统立即放弃第一个任务,开始运行第二个任务
第二个任务的调度也符合上面的规律,然后再是,当任务一/二再次开始运行时,重置这个任务,即从这个任务的第一条代码处开始运行。
请问各位大侠, 这个任务调度应该怎么实现?
还有一个问题,在嵌入式操作系统的时间片的轮询功能中,提到若一个任务在第一个时间片内没有运行完,当它的第二个时间片到来之时,是重新开始运行(重置这个任务)的,而不是接着第一个时间片的末尾开始运行的,请问,有没有大侠能够帮组在下解释一下其中的原理?
在此拜谢各位大侠了!
------解决思路----------------------
如果只是俩个task干嘛还用操作系统,如果是多task,在任务切换的地方判断是不是你要求的那个优先级,如果是你要求的优先级,则把要恢复的上下文变成你task刚开始运行的上下文,而不是任务切换时的上下文,这样可以做到任务重置,不管你task跑到什么地方。顺便说下,任务切换周期可以设置成0.2S,或者更低,看你们对精度的要求,其次不要做一些原子操作。