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,SysT