这一点没有人有疑义吧。 那么,有没有哪个优先级任务迫切到要在0.5ms之内去抢占/去打断其他任务的时间片? 圈圈的意思是说,当一个低优先级启动5ms延时时,当延时时间到达时,恰好有一个高优先级的任务需要运行,于是抢占发生了,低优先级的延时误差产生了。
但是我这个调度器不是这么设计的,我是让低优先级任务A在精确延时时间到达时,变化了优先权,A任务这时优先权最高,不允许任何其他任务打断。这样即使有紧急任务申请执行,对不起,请推迟300us(最大延迟,没那么巧。)什么样的任务等不及300us ?(注意这是最慢的CPU )那就放到中断事件程序里执行,这样比切换任务快。非要说300us我等不及,那就用专用快速CPU单一任务为你服务怎么样?因为一个抢占切换程序运行时间也要100us以上!
前面一个帖子说过,当一个低优先级任务A运行到还剩20us完成时,抢占任务B来了,A被挂起了,结果抢占切换任务程序需要运行100us,任务B反而慢了。谁都知道,抢占任务切换程序的运行时间比正常结束任务的切换时间要长得多。(它还要保留A任务的恢复点和交换栈区什么的)。于是,我说这很滑稽。所以我设计当前任务不允许抢占。也就是合作式调度器。
如果打死也不相信的话,请给我出一道实际一点的难题,我递交我的程序。看看有没有误差。
另外,设置时间片10ms,就是认为10ms时基误差可以忽略。这是时间片设置原则。我设置的是100us,那么误差就是100us。
|