01 - K_TMO与K_IVL的区别
调用os_wait() / os_wait2()指定K_TMO / K_IVL参数都能让任务进入waiting状态,然后等待一段时间后恢复到ready状态,K_TMO和K_IVl的区别有:
1、计算的起点:K_TMO是以当前调用wait / wait2的时间为起点,K_IVL是以上一次任务结束为起点。
2、是否包含任务本身执行时间:K_TMO不包含,K_IVl包含。
通过一个时序图说明情况,如下图,有3个任务,分别是task_0/1/2,假设3个任务的自身执行时间task_x code = 1ms:
task_0没有调用任何阻塞API。
task_1使用K_TMO参数等待3ms超时。
task_2使用K_IVL等待3ms间隔。
并假设调度器先按照task_0、task_1、task_2的顺序调度任务:

- task_0先执行1ms,SysTick=1
- task_1执行1ms,然后等待3ms超时,SysTick=2
- task_2执行1ms,然后等待3ms间隔,SysTick=3
- task_0执行2ms,此时只有task_0

最低0.47元/天 解锁文章
1497

被折叠的 条评论
为什么被折叠?



