附:常用系统调用
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号*/
)
该函数释放与此信号量相关的资源,所有等待此信号量的任务解阻。