VxWorks里常用的定时/延时机制有哪些
这篇文章主要介绍VxWorks里常用的定时/延时机制有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
VxWorks里常用的定时/延时机制
taskDelay()
sleep()/nanosleep()
WatchDog
Auxiliary Clock
Timestamp
taskDelay()
ticks为0时 - 将当前任务(正在就绪队列中执行)移动到同优先级任务的尾部(仍在就绪队列中)
ticks为n(大于0)时 - 将当前任务(正在就绪队列中执行)移动到延时队列,并在遇到系统时钟的第n个tick时,将其移回就绪队列。因此实际delay时长为(n-1, n]个tick,也就是说taskDelay()有0-1个tick的误差
任务在延时队列中,如果遇到非阻塞、非忽略的signal,taskDelay()返回ERROR,并设置ERRNO为EINTR
任务回到就绪队列后,可能前面有高(或同等)优先级任务,因此delay时间可能会变长
sleep()/nanosleep()
参数是时间
rmtp不为NULL时 - 用于存储sleep()/nanosleep()因为signal提前返回而剩余的时长
定时为0时(secs=0;rqtp->tv_sec=rqtp->tv_nsec=0) - 不做任何操作
定时不为0时 - 延时至少参数时长(向上取整,基数是系统时钟)再加1个系统时钟tick
nanosleep()也是这样操作的:
WatchDog
Auxiliary Clock
定时精度可以远高于WatchDog,而且定时是周期性的
Timestamp
定时精度最高,可以到纳秒,但多数板子里只支持轮询模式
以上是"VxWorks里常用的定时/延时机制有哪些"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!