VOS系统调⽤
使⽤⽅法(3)
任务管理(4)
_sys_task_init_private(4)
sys_task_spawn(4)
sys_task_create(5)
sys_task_delete(5)
sys_task_restart(6)
sys_task_start(tid)(6)
sys_task_lock(6)
sys_task_unlock(6)
sys_task_safe(7)
sys_task_unsafe(7)
sys_task_delay(ticks)(7)
sys_task_suspend(tid)(7)
sys_task_resume(tid)(7)
sys_task_pri_get(8)
sys_task_pri_t(8)
sys_task_option_get(8)
sys_task_option_t(8)
消息队列管理(9)
sys_msgq_create(9)
sys_msgq_delete(9)
sys_msgq_nd(9)
sys_msgq_receive(10)
sys_msgq_peek(11)
信号量管理(11)
sys_sm_create(11)
sys_sm_delete(12)
sys_sm_p(12)
sys_sm_v(12)
sys_sm_mutex_create(13)
sys_sm_mutex_delete(13)
sys_sm_mutex_lock(13)
sys_sm_mutex_unlock(14)
事件管理(14)
sys_ev_receive(14)
sys_ev_nd(14)
定时器管理(15)
存储管理(15)
杂项:辅助功能(15)
sys_int_lock(m)(15)
sys_int_unlock(m)(15)
SYS_PC_SAVE/SYS_PC_RESTORE/SYS_PC_GET(15)
错误码索引(16)
原pSOS系统调⽤对应的VOS系统调⽤(17)
⽤于系统配置的宏(18)
SYS_MAX_TASKS(18)
SYS_TASK_WITH_MSGQ(18)
SYS_MAX_TIMERS(18)
SYS_MEM_VOS(18)
SYS_MEM_MAX_SIZE_RANK(18)
SYS_MEM_VOS_MAXSIZE(19)
SYS_MEM_SIZE_INC_METHOD(19)
SYS_MEM_SIZE_INC_FACTOR(19)
SYS_MEM_VOS_MALLOC_WHEN_LIST_EMPTY(19)
SYS_MBLK_SWAP_MBLK_WHEN_ADDHDR(19)
SYS_MBLK_SWAP_MBLK_WHEN_DELHDR(19)
SYS_MBLK_SWAP_MBLK_WHEN_FREE(19)
VOS系统调⽤
常⽤语说明:
RTOS:系统运⾏的实时操作系统,如pSOS、VxWorks等
VOS:RTOS上的封装层,对应⽤屏蔽不同RTOS接⼝的差异
主调任务:调⽤该系统调⽤的任务
指定任务:由参数tid标识的任务
互斥量持有者:当前对于某个互斥量进⾏了P操作的任务
使⽤⽅法
1、在不同的操作系统中需要定义不同的操作系统宏;例如pSOS系统需要定义OS_PSOS
为1、VxWorks系统中需要定义OS_VXWORKS为1
2、头⽂件包含关系:先包含操作系统的头⽂件,再包含开发环境的头⽂件,对于VxWorks
系统,应该先包含$(TGT_DIR)/h再包含开发环境的头⽂件
3、(VxWorks)编译时应该增加的额外选项:-DOS_VXWORKS=1–I$(TGT_DIR)/h
–I$(SWITCH_BASE)/include–I.
4、应⽤程序需要包含头⽂件;对于不同的模块应额外包含不同的头
⽂件:
a)任务管理:
b)消息队列管理:
c)信号量、互斥量管理:
d)定时器管理:
e)存储管理:
任务管理
_sys_task_init_private
原型:uint32_sys_task_init_private()
说明:初始化任务相关数据结构,并创建IDLE任务
返回值:SYS_OK:成功
其它:失败
sys_task_spawn
原型:TASK_IDsys_task_spawn(
charname[],
uint32priority,
uint32options,
uint32stacksize,
FUNCPTRentrypoint,
uint32args[],
uint32argc)
说明:本函数创建⼀个任务,并将该任务设置为就绪(Ready)状态。参数说明如下:
返回值:
SYS_ERROR:创建任务失败
其它值:任务的TID;此TID只能由VOS的系统调⽤使⽤
相关:sys_task_create、sys_task_delete
sys_task_create
原型:TASK_IDsys_task_create(
charname[],
uint32priority,
uint32options,
uint32stacksize,
FUNCPTRentrypoint,
uint32args[],
uint32argc)
说明:本函数创建⼀个任务,并将任务设置为阻塞态,需要通过sys_task_start启动。参数说明及返回值与sys_task_spawn完
全相同。
返回值:略
相关:sys_task_spawn、sys_task_delete
sys_task_delete
原型:uint32sys_task_delete(TASK_IDtid)
说明:本函数删除⼀个任务。参数tid由函数sys_task_spawn或sys_task_create返回。当删除⼀个持有互斥信号量的任务时,
该信号量可能永远⽆效
返回值:
SYS_OK:成功
其它:失败,可能的错误码有
ERR_OBJDEL:执⾏sys_task_delete的过程中,由于任务当前处于不可删除状态导致主调过程被挂起;当任务重新可删除
时,tid任务却已经被其它任务删除,本函数返回此错误码
ERR_OBJID:⾮法的tid,或tid不是⼀个任务ID
相关:sys_task_spawn、sys_task_create
sys_task_restart
原型:uint32sys_task_restart(TASK_IDtid)
说明:重启动⼀个任务。参数tid由函数sys_task_spawn或sys_task_create返回。
返回值:
SYS_OK:成功
其它:失败,可能的错误码有
ERR_OBJID:⾮法的tid,或tid不是⼀个任务ID
ERR_NACTIVE:任务尚未启动
ERR_OBJDEL
相关:sys_task_spawn、sys_task_create、sys_task_delete
sys_task_start(tid)
说明:启动⼀个由sys_task_create创建的任务,tid由该函数返回。该宏有uint32型返回值相关:sys_task_create
返回值:
SYS_OK:成功
其它:失败,可能的错误码有
ERR_ACTIVE:任务已经激活
ERR_OBJID:⾮法的tid,或tid不是⼀个任务ID
sys_task_lock
说明:宏。禁⽌任务调度;调⽤该宏防⽌主调任务被⾼优先级任务抢占。如果创建任务时未使⽤参数T_OP_PREEMPT,则
⽆需调⽤该宏。调⽤sys_task_unlock解除禁⽌。该宏有uint32型返回值
相关:sys_task_spawn、sys_task_create、sys_task_unlock
返回值:SYS_OK
sys_task_unlock
说明:宏。允许任务调度;调⽤该宏相当于创建任务时使⽤了参数T_OP_PREEMPT。调⽤sys_task_lock禁⽌任务调度。该
宏有uint32型返回值
相关:sys_task_spawn、sys_task_create、sys_task_lock
sys_task_safe
说明:宏。禁⽌主调任务被删除。创建任务时被默认调⽤;调⽤sys_task_unsafe解除禁⽌。如果调⽤sys_task_delete删除之
前⽆需调⽤。该宏有uint32型返回值
相关:sys_task_unsafe
返回值:SYS_OK
sys_task_unsafe
说明:宏。允许主调任务被删除。该宏有uint32型返回值
相关:sys_task_safe
返回值:SYS_OK
sys_task_delay(ticks)
说明:宏。使主调任务进⼊阻塞状态,直⾄ticks时间后,或收到异常。该宏有uint32型返回值
相关:⽆
返回值:
SYS_OK:任务等待了ticks时间
sys_task_suspend(tid)
说明:宏。使指定任务进⼊阻塞状态,只有调⽤sys_task_resume才能使任务离开阻塞状态。该宏有uint32型返回值
相关:sys_task_resume
返回值:
SYS_OK:成功挂起任务
其它:任务挂起失败,可能的错误码有
ERR_OBJID:tid错误
sys_task_resume(tid)
说明:宏。使指定任务离开由sys_task_suspend⽽造成的阻塞状态。该宏有uint32型返回值相关:sys_task_suspend
返回值:
SYS_OK:成功恢复任务挂起
其它:任务恢复失败,可能的错误码有
ERR_OBJID:tid错误
sys_task_pri_get
原型:uint32sys_task_pri_get(TASK_IDtid,uint32*pri)
说明:本函数⽤于取得任务的优先级;TASK_ID由创建任务的调⽤返回;pri⽤于返回优先级
返回值:
SYS_OK:成功
其它:失败;可能的错误码有
ERR_OBJID:错误的tid
ERR_NULLPTR:指针pri为NULL
sys_task_pri_t
原型:uint32sys_task_pri_t(TASK_IDtid,uint32pri)
说明:本函数⽤于设置任务的优先级;TASK_ID由创建任务的调⽤返回;pri为新优先级返回值:
SYS_OK:成功
其它:失败;可能的错误码有
ERR_OBJID:错误的tid
ERR_SETPRI:错误的优先级
sys_task_option_get
原型:uint32sys_task_option_get(TASK_IDtid,uint32*options)
说明:本函数⽤于取得任务的初始设置;TASK_ID由创建任务的系统调⽤返回;options为保存设置的指针
返回值:
SYS_OK:成功
ERR_OBJID:错误的tid
sys_task_option_t
原型:uint32sys_task_option_t(TASK_IDtid,uint32options)
说明:本函数⽤于重新设置任务的设置选项;TASK_ID由创建任务的系统调⽤返回;options为该任务的新设置。对于⾮法的
设置将被忽略
返回值:
SYS_OK:成功
ERR_OBJID:错误的tid
消息队列管理
sys_msgq_create
原型:MSG_Q_IDsys_msgq_create(uint32maxmsg,uint32options)
说明:本函数创建⼀个消息队列,该队列最多能够容纳maxmsg个消息,每个消息16字节。
NULL:创建消息队列失败,如果它不是在ISR中调⽤的,则是系统堆内存不⾜
其它:消息队列的qid
相关:sys_msgq_delete
sys_msgq_delete
原型:uint32sys_msgq_delete(MSG_Q_IDqid)
说明:删除指定消息队列。参数qid由sys_msgq_create返回。所有阻塞于该队列的任务将返回,调⽤的函数返回错误
(SYS_OK之外的值)
返回值:
SYS_OK:删除成功
其它:删除失败,可能的错误码有:
ERR_OBJID:qid错误
相关:sys_msgq_create
sys_msgq_nd
原型:uint32sys_msgq_nd(MSG_Q_IDqid,uint32buf[SYS_MAX_MSGLEN_INT],uint32options,TICKtimeout)
说明:向指定消息队列发消息。参数说明如下:
SYS_OK:发送成功
其它:发送失败,可能的错误码有:
ERR_OBJID:qid错误
ERR_QFULL:队列满
ERR_TIMEOUT:超时
ERR_OBJDEL:等待过程中队列被删除
相关:sys_msgq_create、sys_msgq_receive、sys_msgq_nd_to_tasksys_msgq_receive
原型:uint32sys_msgq_receive(
MSG_Q_IDqid,
uint32buf[SYS_MAX_MSGLEN_INT],
TICKtimeout)
返回值:
SYS_OK:接收成功
其它:接收失败,可能的错误码有:
ERR_OBJID:qid错误
ERR_NOMSG:队列空
ERR_TIMEOUT:超时
ERR_OBJDEL:等待过程中队列被删除
相关:sys_msgq_create、sys_msgq_nd、sys_msgq_receive_from_task
sys_msgq_msgcount
原型:uint32sys_msgq_msgcount(MSG_Q_IDqid)
说明:取得指定队列中的待处理消息数量;参数qid由sys_msgq_create返回
返回:
SYS_ERROR:qid⾮法
其它:消息数量
相关:sys_msgq_create
sys_msgq_peek
原型:uint32sys_msgq_peek(MSG_Q_IDqid,uint32buf[SYS_MAX_MSGLEN_INT],TICKtimeout)
说明:取得指定消息队列的第⼀个消息包,如果没有消息包则根据timeout参数进⾏等待;qid由sys_msgq_create返回
返回:
SYS_OK:成功
其它:错误,可能的错误码有
ERR_OBJID:qid错误
ERR_NOMSG:队列空
ERR_TIMEOUT:超时
ERR_OBJDEL:等待过程中队列被删除
相关:sys_msgq_create
信号量管理
sys_sm_create
原型:SEM_IDsys_sm_create(uint32options,uint32count);
说明:创建⼀个信号量。参数含义如下:
NULL:没有内存
其它:信号量ID
相关:sys_sm_delete
sys_sm_delete
原型:uint32sys_sm_delete(SEM_IDsid);
说明:删除⼀个信号量;所有阻塞于该信号量的任务将被解阻塞,对应函数返回错误;参数sid由函数sys_sm_create返回
返回值:
SYS_ERROR:删除失败,可能的原因有:⾮法的sid
SYS_OK:删除成功
相关:sys_sm_create
sys_sm_p
原型:uint32sys_sm_p(SEM_IDsid,TICKtimeout);
只适⽤于信号量;对于互斥量,请使⽤函数sys_sm_mutex_lock。
返回值:
SYS_OK:P操作成功
其它:P操作失败,可能的错误码有
ERR_OBJID:⾮法的sid
ERR_TIMEOUT:等待超时
ERR_NOSEM:P操作失败,计数器已经为零
ERR_OBJDEL:对象被删除
相关:sys_sm_v、sys_sm_create
sys_sm_v
原型:uint32sys_sm_v(SEM_IDsid);
说明:对⼀个信号量进⾏V操作,参数sid由函数sys_sm_create返回。只适⽤于信号量;对于互斥量,请使⽤函数
sys_sm_mutex_unlock只有持有者才能对它进⾏V操作。可能导致主调任务被抢占
返回值:
SYS_OK:V操作成功
其它:V操作失败;可能的原因有:
ERR_OBJID:⾮法的sid
相关:sys_sm_p、sys_sm_create
sys_sm_mutex_create
原型:uint32sys_sm_mutex_create()
说明:创建⼀个互斥量
返回值:
NULL:内存不⾜,⽆法创建互斥量
其它:互斥量的SEM_ID
sys_sm_mutex_delete
原型:uint32sys_sm_mutex_delete(SEM_IDmutex)
说明:删除⼀个互斥量
返回值:
SYS_OK:删除成功
其它:删除失败,可能的错误码有
ERR_OBJID:互斥量ID⽆效
sys_sm_mutex_lock
原型:uint32sys_sm_mutex_lock(SEM_IDsid,TICKtimeout)
说明:对⼀个互斥量进⾏lock操作(P操作),参数sid由函数sys_sm_create返回。只⽤于互斥量,信号量请使⽤函数
sys_sm_p。对于设置了SM_OP_RECURSIVE的互斥量(即同时以标志SM_OP_MUTEX和SM_OP_RECURSIVE创建的信
号量),它的持有者可以多次对它进⾏P操作,虽然该互斥量的初始值为1。
返回值:
SYS_OK:lock操作成功
其它:失败,可能的错误码有:
ERR_MULOCKED:互斥量已经被占⽤
ERR_TIMEOUT:等待超时
ERR_MUKILLD:等待过程中互斥量被删除
相关:sys_sm_create、sys_sm_mutex_unlock
sys_sm_mutex_unlock
原型:uint32sys_sm_mutex_unlock(SEM_IDsid)
说明:对⼀个互斥量进⾏unlock操作(V操作),参数sid由函数sys_sm_create返回。只⽤于互斥量,信号量请使⽤函数
sys_sm_v。只有互斥量持有者才能对它进⾏unlock操作。
返回值:
SYS_OK:unlock操作成功
其它:操作失败,可能的错误码有
ERR_NOTOWNED:主调任务不是互斥量的持有者
ERR_OBJID:sid⾮法
相关:sys_sm_create、sys_sm_mutex_lock
事件管理
sys_ev_receive
原型:uint32sys_ev_receive(uint32events,uint32flags,TICKtimeout,uint32*events_r)
说明:等待⼀个事件,并阻塞任务,⽆论是否等待都可能引发任务切换。参数events表⽰需要等待的事件的集合,以掩码表
⽰,如果等待事件成功,参数events_r⽤于保存收到的事件,参数flags含义如下:
返回值:
SYS_OK:接收事件成功,此时events_r中包含接收到的事件;如果flags是EV_ALL,*events_r应该与events相同,否则
*events_r是events的⼦集
其它:操作失败,可能的错误码有:
ERR_TIMEOUT:以⾮SYS_NO_WAIT等待时间接收事件失败
ERR_NOEVS:不等待接收事件失败
ERR_NULLPTR:传⼊events_r为空指针
sys_ev_nd
原型:uint32sys_ev_nd(TASK_IDtid,uint32events)
说明:向任务tid发送⼀组事件events。参数tid为⽬的任务的ID,events表⽰需要发送的事件。本调⽤将引发任务切换
返回值:
SYS_OK:发送成功
其它:操作失败,可能的错误码有:
ERR_OBJID:传⼊的tid不正确
定时器管理
定时器管理类系统调⽤完全继承路由器系统调⽤,增加了循环定时器功能:在增加定时器时指定TIMER_LOOP选项创建即为
循环定时器,循环定时器会从启动时间开始每隔超时时间向应⽤发送⼀个消息或调⽤回调函数。
存储管理
存储管理类系统调⽤完全继承路由器系统调⽤,此处从略
杂项:辅助功能
sys_int_lock(m)
说明:宏。⽤于禁⽌中断。有⼀个uint32型的返回值,重新使能中断时会⽤到
sys_int_unlock(m)
说明:宏。⽤于使能中断,与sys_int_lock配对使⽤。m为由sys_int_lock返回的值
SYS_PC_SAVE/SYS_PC_RESTORE/SYS_PC_GET
说明:宏。⽤于记录⼀个函数的调⽤者的PC指针。假设函数intfoo(inta,intb)中需要使⽤到调⽤者的PC指针,那么在函数定
义开始处的“{”后调⽤宏SYS_PC_SAVE,在函数定义结束处的“}”前调⽤宏SYS_PC_RESTORE,在使⽤时调⽤宏
SYS_PC_GET。使⽤前两个宏时不要在末尾增加括号、分号。宏SYS_PC_GET没有副作⽤。⽰例如下:
intfoo(inta,intb)
{
SYS_PC_SAVE/*此处不得有括号、分号*/
/*局部变量定义*/
intlocal;
…
/*使⽤PC指针*/
local=SYS_PC_GET;
…
/*直接作为函数的参数使⽤*/
printf(“thecaller…sprogramcounteris%x”,SYS_PC_GET);
…
SYS_PC_RESTORE/*此处不得有括号、分号*/
}
错误码索引
原pSOS系统调⽤对应的VOS系统调⽤
⽤于系统配置的宏
系统可以使⽤宏进⾏配置,裁减掉不需要的功能。
SYS_MAX_TASKS
系统能够创建的最⼤任务数量;默认值为100,不定义此宏则不限制系统最⼤任务数量。
SYS_TASK_WITH_MSGQ
若该宏定义为SYS_YES,调⽤函数_sys_task_spawn和_sys_task_create创建任务时如果指定了T_OP_CREATEMSGQ标
志,系统为该任务创建⼀个默认消息队列;该宏定义为SYS_NO时,系统不为该任务创建默认消息队列,标志T_OP_CREA
TEMSGQ和参数也将被忽略。
SYS_MAX_TIMERS
系统能够创建的最⼤定时器数量;默认值为32768。定义此宏时,系统为SYS_MAX_TIMERS个定时器保留空间,创建⼀个定
时器时将采⽤VOS系统管理定时器控制结构,速度更快,但这部分空间⽆法⽤于其它⽬的;不定义此宏则定时器数量不限
制,创建⼀个定时器时将采⽤VOS的sys_mem_malloc/sys_mem_free机制为定时器控制结构分配空间,速度稍慢但空间使⽤
相对灵活。
SYS_MAX_MSGQLEN
默认系统消息队列中包含的最⼤消息包数量。必须定义;默认为1024。
SYS_MEM_VOS
系统内存分配⽅式。当定义为SYS_YES时,采⽤缓冲链表⽅式管理;当定义为SYS_NO时采⽤RTOS的malloc/free⽅式管
理。建议在调试状态和运⾏状态都定义为SYS_YES,这样对于⼤多数应⽤来说可以提⾼malloc/free函数的效率
SYS_MEM_MAX_SIZE_RANK
当采⽤缓冲链表⽅式管理内存分配时,系统维护⼀个递增序列(等差序列或等⽐序列,依赖于宏
SYS_MEM_SIZE_INC_METHOD),并为该序列每个值维护⼀个链表,链表每个节点为⼤⼩等于该值的⼀块空闲内存空间。
当应⽤申请⼀块⼤⼩为size的内存时,如果size不⼤于SYS_MEM_VOS_MAXSIZE,则⾸先从递增序列中不⼩于size的最⼩
值对应的链表中
寻找空闲块,若该链表没有空闲节点且SYS_MEM_VOS_MALLOC_WHEN_LIST_EMPTY设置为SYS_NO,则直接调⽤系
统的malloc/free函数;如果设置为SYS_YES,则依次从递增序列中下⼀个值对应的链表中寻找空闲块,如果有则分配,否则
调⽤RTOS的malloc/free分配;如果size⼤于SYS_MEM_VOS_MAXSIZE,直接调⽤RTOS的malloc/free分配。
SYS_MEM_VOS_MAXSIZE
当应⽤申请⼀块内存时,如果⼤⼩不⼤于SYS_MEM_VOS_MAXSIZE,则优先从缓冲链表中寻找;否则之间调⽤RTOS的
malloc/free函数。
SYS_MEM_SIZE_INC_METHOD
定义为SYS_CONST_SIZE_INC_LINEARITY时表⽰序列为等差序列,定义为SYS_CONST_SIZE_INC_NON_LINEARITY
时表⽰序列为等⽐序列,级差为SYS_MEM_SIZE_INC_FACTOR
SYS_MEM_SIZE_INC_FACTOR
请参见SYS_MEM_SIZE_INC_METHOD
SYS_MEM_VOS_MALLOC_WHEN_LIST_EMPTY
请参见SYS_MEM_MAX_SIZE_RANK
SYS_MBLK_SWAP_MBLK_WHEN_ADDHDR
定义为VOS_YES时表⽰当对mBlk进⾏增加头操作时进⾏优化操作,默认关闭
SYS_MBLK_SWAP_MBLK_WHEN_DELHDR
定义为VOS_YES时表⽰当对mBlk进⾏删除头操作时进⾏优化操作,默认关闭
SYS_MBLK_SWAP_MBLK_WHEN_FREE
定义为VOS_YES时表⽰当对mBlk进⾏释放操作时进⾏优化操作,默认关闭
本文发布于:2023-03-03 20:18:56,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/1677845936127101.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:系统调用失败.doc
本文 PDF 下载地址:系统调用失败.pdf
留言与评论(共有 0 条评论) |