最近在学习,FreeRTOS,看到延时这里的时候总有些想不通,所以来此提问希望大家指教。
一、
vTaskDelete()是相对延时,是相对与xTickCount(Systick的中断计数)来延时的,所以要依靠systick中断计数准确才能延时准确,那么问题来了,如果在一个任务中调用了vTaskDelete(),systick的计数周期是1ms,当任务正在发生时,有一个高优先级的中断发生,高优先级的中断处理需要5ms(夸张一点),那么此时延时还会准确么?在任务的切换和调度中也有许多进入临界和关中断的地方,这些地方的执行会不会影响延时呢??
二、
vTaskDelayUntil()是绝对式延时,是相对与*pxPreviousWakeTime的延时,而且是每次执行完vTaskDelayUntil()自动更新,所以就可以做到固定频率执行了,但是还是向上面说的那样,如果在一个任务中调用了vTaskDelete(),systick的计数周期是1ms,当任务正在发生时,有一个高优先级的中断发生,高优先级的中断处理需要5ms(夸张一点),那么此时延时还会准确么?在任务的切换和调度中也有许多进入临界和关中断的地方,这些地方的执行会不会影响延时呢??虽然在下面的图片上说会压缩其他任务的时间,这是压缩的时间是如何同步的呢?
以上图片的连接来源:http://blog.csdn.net/cheatscat/article/details/78113726
这里有不是很明白希望大家答疑解惑,小弟谢谢了