关闭

vxWorks中的常识!!!

标签: 任务任务调度timerfunctionincludelist
1608人阅读 评论(0) 收藏 举报

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
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:419529次
    • 积分:4505
    • 等级:
    • 排名:第6827名
    • 原创:13篇
    • 转载:194篇
    • 译文:0篇
    • 评论:57条
    文章分类
    最新评论