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

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值