VxWorks操作系统指南(附) 常用系统调用

本文介绍了VxWorks操作系统中的一些常用系统调用,包括任务创建(taskSpawn)、任务删除(taskDelete)、任务延迟(taskDelay)、消息队列创建(msgQCreate)、发送与接收消息(msgQSend、msgQReceive)等,详细阐述了各函数的使用方法和参数含义,是VxWorks开发的重要参考资料。

附:常用系统调用

1.taskSpawn       创建(产生并激活)新任务

  int    taskSpawn

   (

    char   *name, /*新任务名称*/

    int priority,  /*任务的优先级*/

    int options,   /*任务可选项*/

    int stackSize, /*任务堆栈大小*/

    FUNCPTR    entryPt,   /*任务入口函数*/

    int arg1,      /*任务入口函数所带参数1~10*/

    int arg2,  int arg3,            

    int arg4,  int arg5,

    int arg6,  int arg7,

    int arg8,  int arg9,

    int arg10

   )

  函数运行成功返回任务ID号,否则为ERROR

任务可选项的几种模式如下表:

   

                

                                           

VX_FP_TASK

VX_NO_STACK_FILL

VX_PRIVATE_ENV

VX_UNBREAKABLE

VX_SUPERVISOR_MODE

0x8

0x100

0x80

0x2

运行带浮点的协处理器

不使用0xee填充堆栈

用私有环境运行任务

断点失效

用户任务常用值

 

 

2.taskDelete  删除一个任务

 STATUS    taskDelete

 (

  int    tid   /*删除任务的ID*/

 )

  删除指定ID号的任务,并释放任务所占有的内存

3.taskDelay     延迟任务

 STATUS    taskDelay

 (

  int    ticks /*延迟的时间滴答数*/

 )

    任务延迟为某一任务休眠一定时间提供了简单的处理方法,一般用于任务的周期性循环执行。当输入参数为NO_WAIT(其值为零)时,表示将所延迟的任务切换到同一优先级就绪队列的尾部。

4.taskSuspend 任务悬置

  STATUS   taskSuspend

    (

    int tid /*被悬置的任务ID*/

     )

5.taskResume  恢复任务

  STATUS   taskResume

    (

    int tid /*恢复的任务ID*/

     )

6.msgQCreate  创建并初始化消息队列

  #include <msgQLib.h>  

  MSG_Q_ID msgQCreate

   (

    int maxMsgs,      /*队列所能容纳的最大消息数目*/

    int maxMsgLength, /*每一消息的最大长度*/

    int options       /*消息入列方式*/

   )      

消息入列方式有两种:MSG_Q_FIFO 先进先出,按时间先后顺序考虑;MSG_Q_PRIORITY 按消息优先级考虑。

7.msgQSend    向一消息队列发送消息包

   STATUS  msgQSend

    (

    MSG_Q_ID   msgQId,    /*所发向的消息队列名*/

    char   *   buffer,    /*消息包所在缓冲区指针*/

    UINT       nBytes,    /*消息包长度*/

    int    timeout,   /*等待的时间长度*/

    int    priority   /*优先级*/

   )  

    该函数将长度为nBytes的缓冲区buffer消息包发向消息队列msgQId. 如果任务正在等待接收该消息队列的消息包,消息将立即被送到第一个等待的任务。如果没有任务等待此消息,消息包被保留在消息队列中。

    参数timeout指明:当消息队列已满时,等待消息队列有空间时所等待的时间。超过该时间还没空间可用的话,消息包被舍弃。它有两个特殊值:NO_WAIT0)立即返回,不管消息包是否被发送;WAIT_FOREVER-1)一直等待消息队列有空间可用。

    参数priority指明发送的消息的优先级,可能值有:MSG_PRI_NORMAL(0)正常优先级,将消息置于消息队列的尾部;MSG_PRI_URGENT(1)紧急消息,将消息置于消息队列的首部。

8.msgQReceive 接收消息

  int msgQReceive

   (

    MSG_Q_ID   msgQId,    /*接收消息的消息队列ID*/

    char   *   buffer,    /*接收消息的缓冲区指针*/

    UINT       maxNBytes, /*缓冲区长度*/

    int    timeout    /*等待时间*/

   )

   该函数从消息队列msgQId接收消息,将其拷贝到最大长度为maxNBytes的缓冲区buffer。如果消息包长度超过maxNBytes,多余部分被舍弃。等待时间timeout有两个特殊值: NO_WAIT0)立即返回;WAIT_FOREVER-1)一直等待消息队列有消息可取。

9.msgQDelete  删除一个消息队列

   STATUS  msgQDelete

    (

    MSG_Q_ID   msgQId /*要删除的消息队列ID*/

    )  

   任何因发送或接收该消息队列的消息的任务都将解阻,并返回错误errno.

10. wdCreate      创建看门狗定时器

   WDOG_ID wdCreate(void)

11. wdStart       启动定时器

   STATUS  wdStart

   

    WDOG_ID    wdId,      /*看门狗定时器ID*/

    int    delay, /*延迟值,以滴答计*/

    FUNCPTR    pRoutine,  /*超时函数*/

    int    parameter  /*超时函数的参数*/

    

12. wdCancel  取消一个当前工作的定时器

     STATUS      wdCancel

    (

      WDOG_ID  wdId   /*被取消的定时器ID*/

    )

  该函数只是让定时器的延迟值为零来取消其工作。

13. wdDelete  删除定时器

     STATUS      wdDelete

    (

      WDOG_ID  wdId   /*被删除的定时器ID*/

    )

14. semBCreate    创建并初始化二进制信号量

     SEM_ID      semBCreate

    (

      int         options,      /*信号量选项*/

      SEM_B_STATE initialState  /*信号量初始化状态值*/

    )

   信号量初始化状态值有两种:SEM_FULL1)或SEM_EMPTY0)。选项参数指明被阻塞任务的入列方式:基于优先级(SEM_Q_PRIORITY)和先进先出(SEM_Q_FIFO).

15. semCCreate    创建并初始化计数信号量

     SEM_ID      semCCreate

    (

      int      options,      /*信号量选项*/

      int      initialCount  /*信号量初始化计数值*/

    )

   选项参数指明被阻塞任务的入列方式:基于优先级(SEM_Q_PRIORITY)和先进先出(SEM_Q_FIFO).

16. semGive       给出信号量

     STATUS      semGive

    (

     SEM_ID    semId  /*所给出的信号量ID*/

    )

17. semTake       获得信号量

     STATUS      semTake

    (

     SEM_ID    semId  /*所要得到的信号量ID*/

     int       timeout /*等待时间*/

    )

   如果任务在规定时间内未得到信号量,函数semTake返回错误。等待时间值WAIT_FOREVERNO_WAIT分别表示一直等待和不等待。

18. semDelete     删除信号量

     STATUS      semDelete

    (

     SEM_ID    semId  /*要删除的信号量ID*/

    )

该函数释放与此信号量相关的资源,所有等待此信号量的任务解阻。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值