系统调用失败

更新时间:2023-03-03 20:18:56 阅读: 评论:0

宝宝有湿疹怎么办-蜂蜜真假辨别方法

系统调用失败
2023年3月3日发(作者:qq邮箱形式)

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 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 站长QQ:55-9-10-26 专利检索|