Multithreading vxworks任务如何让所有其他优先级较低的任务在一个多任务周期内运行?
vxworks任务如何在最短的时间内将CPU分配给优先级较低的任务 有没有一种方法可以让任务在不到1毫秒的时间内放弃CPU 我所知道的让其他低优先级任务运行的唯一方法是taskDelay(n),其中n>=1 我一直认为taskDelay(0)让所有其他优先级相同或更高的任务运行Multithreading vxworks任务如何让所有其他优先级较低的任务在一个多任务周期内运行?,multithreading,vxworks,Multithreading,Vxworks,vxworks任务如何在最短的时间内将CPU分配给优先级较低的任务 有没有一种方法可以让任务在不到1毫秒的时间内放弃CPU 我所知道的让其他低优先级任务运行的唯一方法是taskDelay(n),其中n>=1 我一直认为taskDelay(0)让所有其他优先级相同或更高的任务运行 taskDelay(1)允许所有优先级较低的挂起任务运行1毫秒 在VxWorks中,某些事件会强制调度程序运行,例如,每个semGive()、每个系统时钟滴答声和taskDelay()。taskDelay()的参数是系统
taskDelay(1)允许所有优先级较低的挂起任务运行1毫秒 在VxWorks中,某些事件会强制调度程序运行,例如,每个semGive()、每个系统时钟滴答声和taskDelay()。taskDelay()的参数是系统时钟的节拍。sysClkRateGet()将返回系统时钟的速率 例如,如果sysClkRateGet()返回10,则每个时钟周期为100毫秒。 因此,如果调用taskDelay(1),那么它将告诉您的任务在下一个系统运行之前休眠。然而,这并不能保证100毫秒的睡眠时间,而是保证100毫秒的睡眠时间,或者如果下一个时钟即将到来,则保证0毫秒的睡眠时间。如果调用taskDelay(2),则任务将休眠到下一个时钟滴答声(0到100毫秒之间的某个时间)加上下一个时钟滴答声(保证为100毫秒)-导致总延迟在100毫秒到200毫秒之间
VxWorks中的计时有很多考虑,我希望这有助于解释一些细节 高优先级任务将始终运行,如果它已准备就绪,并且您还没有调用
taskLock()
或intLock()
等,那么您不需要taskDelay()
让高优先级任务运行
taskDelay(0)
将当前任务置于该优先级的就绪队列的后面。如果它是该优先级的唯一任务,则无论是否存在较低优先级的任务,它都将立即重新调度
taskDelay(n>0)
会将当前任务放在就绪队列的后面,以获得该优先级,并且不会为n
ticks重新安排任务。这将允许运行任何优先级较低的就绪任务
taskDelay()
的参数是ticks,而不是ms。此参数的长度可以根据系统clk速率确定(由sysClkRateSet()
设置,由sysClkRateGet()读取)。1勾号可能等于1ms,但仅在系统时钟频率为1000的情况下。可能不会
注意:此系统时钟与CPU频率不同