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(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控制权,并不发生上下文切换!!!