FreeRTOS之学习延时的困惑

白小白ani 2017-12-13 09:52:44
最近在学习,FreeRTOS,看到延时这里的时候总有些想不通,所以来此提问希望大家指教。
一、vTaskDelete()是相对延时,是相对与xTickCount(Systick的中断计数)来延时的,所以要依靠systick中断计数准确才能延时准确,那么问题来了,如果在一个任务中调用了vTaskDelete(),systick的计数周期是1ms,当任务正在发生时,有一个高优先级的中断发生,高优先级的中断处理需要5ms(夸张一点),那么此时延时还会准确么?在任务的切换和调度中也有许多进入临界和关中断的地方,这些地方的执行会不会影响延时呢??

二、vTaskDelayUntil()是绝对式延时,是相对与*pxPreviousWakeTime的延时,而且是每次执行完vTaskDelayUntil()自动更新,所以就可以做到固定频率执行了,但是还是向上面说的那样,如果在一个任务中调用了vTaskDelete(),systick的计数周期是1ms,当任务正在发生时,有一个高优先级的中断发生,高优先级的中断处理需要5ms(夸张一点),那么此时延时还会准确么?在任务的切换和调度中也有许多进入临界和关中断的地方,这些地方的执行会不会影响延时呢??虽然在下面的图片上说会压缩其他任务的时间,这是压缩的时间是如何同步的呢?


以上图片的连接来源:http://blog.csdn.net/cheatscat/article/details/78113726
这里有不是很明白希望大家答疑解惑,小弟谢谢了
...全文
1941 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
software工程师 2018-02-05
  • 打赏
  • 举报
回复
从延迟精准度来说,sys tick是1ms,那你延迟的预期精度就不能低于1ms,这和os没有关系。 而从vTaskDelayUntil()函数本身来说,os已经帮你做到精确的周期延迟,无论中间是否有上下文切换(包括interrupt和task)
IOTzhang 2018-01-29
  • 打赏
  • 举报
回复
老哥~vTaskDelete()是用来删除任务的~并不是延时功能啊~ 应该是vTaskDelay()吧。

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧