vxWorks中的常识!!!

vxWorks中的常识!!!

LOCAL<=>static
STATUS<=>int
IMPORT<=>extern
FAST<=>register
这几个比较常见

 

FUNCPTR就是指向程序的指针

那句话的意思就是弄一个指针变量,值就是函数printit的地址

其实你直接

timex((FUNCPTR)printit,0,0,0,0,0,0,0,0);

也应该是对的。就是传递了下函数的地址而已

一个库:

timexLib

NAME

timexLib - execution timer facilities 执行定时器设施

ROUTINES

timexInit( ) - include the execution timerlibrary

包括执行定时器库
timexClear( ) - clear the list of functioncalls to be timed

明确要计时功能的调用列表
timexFunc( ) - specify functions to betimed

指定要计时的函数
timexHelp( ) - display synopsis ofexecution timer facilities

显示执行定时器设施的概要
timex( ) - time a single execution ofa function or functions

对一个或多个函数执行的计时
timexN( ) - time repeated executions ofa function or group of functions

重复对一个或多个函数执行的计时
timexPost( ) - specify functions to becalled after timing

特指定时间到达后,指定要调用的函数
timexPre( ) - specify functions to becalled prior to timing

特指定时间到达之前,指定要调用的函数
timexShow( ) - display the list offunction calls to be timed

显示将要计时的函数列表

taskDelay(0)的用法

taskDelay(n)使调用该函数的任务延时n个tick(内核时钟周期)。该任务在指定的时间内主动放弃CPU,任务延时也常用于等待某一外部事件,作为一种定时/延时机制,而taskDelay(0)专用于任务调度(将CPU交给同一优先级的其他任务)。但是,taskDelay(0)时,同一优先级的任务中只有当前任务唯一一个呢?会发生什么问题?此时还有上下文切换吗?自己前换到自己?

其实,当调用taskDelay(0)时,首先,它不会导致更低优先级的任务获得CPU控制权;只有具有相同优先级的就绪任务时才会发生上下文切换。taskDelay(0)本质上是将当前任务放到该优先级队列的尾部,如果该任务是本队列中的唯一任务时,则该任务将保持CPU控制权。

taskDelay(0) --> Q_REMOVE& Q_PUT --> windExit():

taskCode:

if (taskIdCurrent == (WIND_TCB*) Q_FIRST (&readyQHead)) //说明队列中只有一个任务

     if(!workQIsEmpty)
     {
          workQDoWork();
          goto taskCode;
     }    

status =_sigCtxSave(&(taskIdCurrent->regs));

所以,taskDelay(0)时,同一优先级的任务中只有当前任务唯一一个,那么该任务将保持CPU控制权,并不发生上下文切换!!!

 

你可能感兴趣的:(timer,list,function,任务调度,include,任务)