Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading vxworks任务如何让所有其他优先级较低的任务在一个多任务周期内运行?_Multithreading_Vxworks - Fatal编程技术网

Multithreading vxworks任务如何让所有其他优先级较低的任务在一个多任务周期内运行?

Multithreading vxworks任务如何让所有其他优先级较低的任务在一个多任务周期内运行?,multithreading,vxworks,Multithreading,Vxworks,vxworks任务如何在最短的时间内将CPU分配给优先级较低的任务 有没有一种方法可以让任务在不到1毫秒的时间内放弃CPU 我所知道的让其他低优先级任务运行的唯一方法是taskDelay(n),其中n>=1 我一直认为taskDelay(0)让所有其他优先级相同或更高的任务运行 taskDelay(1)允许所有优先级较低的挂起任务运行1毫秒 在VxWorks中,某些事件会强制调度程序运行,例如,每个semGive()、每个系统时钟滴答声和taskDelay()。taskDelay()的参数是系统

vxworks任务如何在最短的时间内将CPU分配给优先级较低的任务

有没有一种方法可以让任务在不到1毫秒的时间内放弃CPU

我所知道的让其他低优先级任务运行的唯一方法是taskDelay(n),其中n>=1

我一直认为taskDelay(0)让所有其他优先级相同或更高的任务运行


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频率不同