附:常用系统调用 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_WAIT(0)立即返回,不管消息包是否被发送;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_WAIT(0)立即返回;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_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 /*所给出的信号量ID号*/ ) 17. semTake 获得信号量 STATUS semTake ( SEM_ID semId /*所要得到的信号量ID号*/ int timeout /*等待时间*/ ) 如果任务在规定时间内未得到信号量,函数semTake返回错误。等待时间值WAIT_FOREVER和NO_WAIT分别表示一直等待和不等待。 18. semDelete 删除信号量 STATUS semDelete ( SEM_ID semId /*要删除的信号量ID号*/ ) 该函数释放与此信号量相关的资源,所有等待此信号量的任务解阻。
|