【转帖】VxWorks常用函数

本文介绍了RTOS中的关键概念,包括任务的创建、删除与调度,以及通过消息队列、信号量等方式实现的任务间通信和同步机制。此外还涵盖了看门狗定时器的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1.taskSpawn 创建(产生并激活)新任务
   int taskSpawn
   (
   c
har *name,
   int priority,
   int options,
   int stackSize,
   FUNCPTR entryPt,
   int arg1,
   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号的任务,并释放任务所占有的内存
  3.taskDelay 延迟任务
  STATUS taskDelay
  (
   int ticks
  )
   任务延迟为某一任务休眠一定时间提供了简单的处理方法,一般用于任务的周期性循环执行。当输入参数为NO_WAIT(其值为零)时,表示将所延迟的任务切换到同一优先级就绪队列的尾部。
  4.taskSuspend 任务悬置
   STATUS taskSuspend
   (
   int tid
   )
  5.taskResume 恢复任务
   STATUS taskResume
   (
   int tid
   )
  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_WAIT(0)立即返回,不管消息包是否被发送;WAIT_FOREVER(-1)一直等待消息队列有空间可用。
   参数priority指明发送的消息的优先级,可能值有:MSG_PRI_NORMAL(0)正常优先级,将消息置于消息队列的尾部;MSG_PRI_URGENT(1)紧急消息,将消息置于消息队列的首部。
  8.msgQReceive 接收消息
   int msgQReceive
   (
   MSG_Q_ID msgQId,
   char * buffer,
   UINT maxNBytes,
   int timeout
   )
   该函数从消息队列msgQId接收消息,将其拷贝到最大长度为maxNBytes的缓冲区buffer。如果消息包长度超过maxNBytes,多余部分被舍弃。等待时间timeout有两个特殊值: NO_WAIT(0)立即返回;WAIT_FOREVER(-1)一直等待消息队列有消息可取。
  9.msgQDelete 删除一个消息队列
   STATUS msgQDelete
   (
   MSG_Q_ID msgQId
   )
   任何因发送或接收该消息队列的消息的任务都将解阻,并返回错误errno.
  10. wdCreate 创建看门狗定时器
   WDOG_ID wdCreate(void)
  11. wdStart 启动定时器
   STATUS wdStart
   (
   WDOG_ID wdId,
   int delay,
   FUNCPTR pRoutine,
   int parameter
   )
  12. wdCancel 取消一个当前工作的定时器
   STATUS wdCancel
   (
   WDOG_ID wdId
   )
   该函数只是让定时器的延迟值为零来取消其工作。
  13. wdDelete 删除定时器
   STATUS wdDelete
   (
   WDOG_ID wdId
   )
  14. semBCreate 创建并初始化二进制信号量
   SEM_ID semBCreate
   (
   int options,
   SEM_B_STATE initialState
   )
   信号量初始化状态值有两种:SEM_FULL(1)或SEM_EMPTY(0)。选项参数指明被阻塞任务的入列方式:基于优先级(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
   )
  17. semTake 获得信号量
   STATUS semTake
   (
   SEM_ID semId
   int timeout
   )
   如果任务在规定时间内未得到信号量,函数semTake返回错误。等待时间值WAIT_FOREVER和NO_WAIT分别表示一直等待和不等待。
  18. semDelete 删除信号量
   STATUS semDelete
   (
   SEM_ID semId
   )
  该函数释放与此信号量相关的资源,所有等待此信号量的任务解阻。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值