VOS系统调用Word下载.docx

上传人:b****1 文档编号:4683877 上传时间:2023-05-03 格式:DOCX 页数:27 大小:25.47KB
下载 相关 举报
VOS系统调用Word下载.docx_第1页
第1页 / 共27页
VOS系统调用Word下载.docx_第2页
第2页 / 共27页
VOS系统调用Word下载.docx_第3页
第3页 / 共27页
VOS系统调用Word下载.docx_第4页
第4页 / 共27页
VOS系统调用Word下载.docx_第5页
第5页 / 共27页
VOS系统调用Word下载.docx_第6页
第6页 / 共27页
VOS系统调用Word下载.docx_第7页
第7页 / 共27页
VOS系统调用Word下载.docx_第8页
第8页 / 共27页
VOS系统调用Word下载.docx_第9页
第9页 / 共27页
VOS系统调用Word下载.docx_第10页
第10页 / 共27页
VOS系统调用Word下载.docx_第11页
第11页 / 共27页
VOS系统调用Word下载.docx_第12页
第12页 / 共27页
VOS系统调用Word下载.docx_第13页
第13页 / 共27页
VOS系统调用Word下载.docx_第14页
第14页 / 共27页
VOS系统调用Word下载.docx_第15页
第15页 / 共27页
VOS系统调用Word下载.docx_第16页
第16页 / 共27页
VOS系统调用Word下载.docx_第17页
第17页 / 共27页
VOS系统调用Word下载.docx_第18页
第18页 / 共27页
VOS系统调用Word下载.docx_第19页
第19页 / 共27页
VOS系统调用Word下载.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

VOS系统调用Word下载.docx

《VOS系统调用Word下载.docx》由会员分享,可在线阅读,更多相关《VOS系统调用Word下载.docx(27页珍藏版)》请在冰点文库上搜索。

VOS系统调用Word下载.docx

sys_int_unlock(m)15

SYS_PC_SAVE/SYS_PC_RESTORE/SYS_PC_GET15

错误码索引16

原pSOS系统调用对应的VOS系统调用17

用于系统配置的宏17

SYS_MAX_TASKS18

SYS_TASK_WITH_MSGQ18

SYS_MAX_TIMERS18

SYS_MAX_MSGQLEN18

SYS_MEM_VOS18

SYS_MEM_MAX_SIZE_RANK18

SYS_MEM_VOS_MAXSIZE19

SYS_MEM_SIZE_INC_METHOD19

SYS_MEM_SIZE_INC_FACTOR19

SYS_MEM_VOS_MALLOC_WHEN_LIST_EMPTY19

SYS_MBLK_SWAP_MBLK_WHEN_ADDHDR19

SYS_MBLK_SWAP_MBLK_WHEN_DELHDR19

SYS_MBLK_SWAP_MBLK_WHEN_FREE19

常用语说明:

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、应用程序需要包含<

libsys/vos/vos_rtos.h>

头文件;

对于不同的模块应额外包含不同的头文件:

a)任务管理:

<

libsys/vos/vos_task.h>

b)消息队列管理:

libsys/vos/vos_msgq.h>

c)信号量、互斥量管理:

libsys/vos/vos_semaphore.h>

d)定时器管理:

libsys/timer.h>

e)存储管理:

libsys/memory.h>

任务管理

_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)状态。

参数说明如下:

名称

定义域

含义

Name

不超过四个字节,不包含作为字符串结尾的’/0’;

如果多于4个字符,多出的将被忽略

任务的名字;

命名规范依赖于用户。

一般任务名字用于调试目的;

不同任务可以重名;

可以传入NULL

Priority

0~255

任务的优先级;

数量越小优先级越高。

注意:

与pSOS系统中定义的优先级相反,因此不要将此优先级直接用于pSOS的系统调用;

对于pSOS系统,优先级230以上保留给系统

Options

Int

任务的运行选项,目前支持下列选项(如果用户在不被支持的系统上使用特定的选项,该选项将被忽略;

所有选项默认不设置):

T_OP_PREEMPT:

任务可抢占(All)

T_OP_TSLICE:

支持优先级轮转(pSOS)

T_OP_SUPV:

任务运行于系统态(pSOS)

T_OP_ISR:

任务允许中断(All)

T_OP_FPSUPPORT:

支持浮点(All)

T_OP_UNBREAKABLE:

任务不可设置断点(VxWorks)

T_OP_DONTSTARTTASK:

创建后不启动任务;

设置此参数时,该函数行为与sys_task_create相同

Stacksize

int

任务堆栈大小。

对于VxWorks系统,任务TCB位于任务堆栈最低端;

由于不同应用需求不同,VOS对堆栈大小不做限制;

如果应用程序堆栈需求过大,会造成操作系统资源不足

entrypoint

本任务入口函数地址

本任务的入口函数。

建议该函数包含一个死循环用于任务主处理流程,每次循环必须有主动放弃CPU控制权的调用;

不建议在该函数中直接或间接调用清狗函数;

该函数可以最多带4个uint32型入参

Args

参数数组,最多4个参数

entrypoint的入口参数

Argc

0~3

参数数量

SYS_ERROR:

创建任务失败

其它值:

任务的TID;

此TID只能由VOS的系统调用使用

相关:

sys_task_create、sys_task_delete

sys_task_create

TASK_IDsys_task_create(

charname[],

uint32args[],

本函数创建一个任务,并将任务设置为阻塞态,需要通过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)

重启动一个任务。

ERR_NACTIVE:

任务尚未启动

ERR_OBJDEL

sys_task_spawn、sys_task_create、sys_task_delete

sys_task_start(tid)

启动一个由sys_task_create创建的任务,tid由该函数返回。

该宏有uint32型返回值

ERR_ACTIVE:

任务已经激活

sys_task_lock

宏。

禁止任务调度;

调用该宏防止主调任务被高优先级任务抢占。

如果创建任务时未使用参数T_OP_PREEMPT,则无需调用该宏。

调用sys_task_unlock解除禁止。

sys_task_spawn、sys_task_create、sys_task_unlock

SYS_OK

sys_task_unlock

允许任务调度;

调用该宏相当于创建任务时使用了参数T_OP_PREEMPT。

调用sys_task_lock禁止任务调度。

sys_task_spawn、sys_task_create、sys_task_lock

sys_task_safe

禁止主调任务被删除。

创建任务时被默认调用;

调用sys_task_unsafe解除禁止。

如果调用sys_task_delete删除之前无需调用。

sys_task_unsafe

允许主调任务被删除。

sys_task_delay(ticks)

使主调任务进入阻塞状态,直至ticks时间后,或收到异常。

任务等待了ticks时间

sys_task_suspend(tid)

使指定任务进入阻塞状态,只有调用sys_task_resume才能使任务离开阻塞状态。

sys_task_resume

成功挂起任务

任务挂起失败,可能的错误码有

tid错误

sys_task_resume(tid)

使指定任务离开由sys_task_suspend而造成的阻塞状态。

sys_task_suspend

成功恢复任务挂起

任务恢复失败,可能的错误码有

sys_task_pri_get

uint32sys_task_pri_get(TASK_IDtid,uint32*pri)

本函数用于取得任务的优先级;

TASK_ID由创建任务的调用返回;

pri用于返回优先级

失败;

可能的错误码有

错误的tid

ERR_NULLPTR:

指针pri为NULL

sys_task_pri_set

uint32sys_task_pri_set(TASK_IDtid,uint32pri)

本函数用于设置任务的优先级;

pri为新优先级

ERR_SETPRI:

错误的优先级

sys_task_option_get

uint32sys_task_option_get(TASK_IDtid,uint32*options)

本函数用于取得任务的初始设置;

TASK_ID由创建任务的系统调用返回;

options为保存设置的指针

ERR_OBJID:

sys_task_option_set

uint32sys_task_option_set(TASK_IDtid,uint32options)

本函数用于重新设置任务的设置选项;

options为该任务的新设置。

对于非法的设置将被忽略

消息队列管理

sys_msgq_create

MSG_Q_IDsys_msgq_create(uint32maxmsg,uint32options)

本函数创建一个消息队列,该队列最多能够容纳maxmsg个消息,每个消息16字节。

消息传送使用拷贝方式。

maxmsg

uint32

该消息队列能够容纳的最多的消息数量

options

该队列的选项。

目前支持:

Q_OP_PRIORITY:

设置此标志则阻塞于队列的任务按照优先级排序,否则先进先出(All)

Q_OP_LIMIT:

是否限制该队列容纳的消息数量,如果设置此标志则maxmsg被忽略。

对于VxWorks系统,如果不限制队列消息数量,当该队列中的消息数量超过系统默认每队列消息数量时(SYS_MAX_MSGQLEN),额外的消息将被抛弃

返回:

NULL:

创建消息队列失败,如果它不是在ISR中调用的,则是系统堆内存不足

消息队列的qid

sys_msgq_delete

uint32sys_msgq_delete(MSG_Q_IDqid)

删除指定消息队列。

参数qid由sys_msgq_create返回。

所有阻塞于该队列的任务将返回,调用的函数返回错误(SYS_OK之外的值)

删除成功

删除失败,可能的错误码有:

qid错误

sys_msgq_send

uint32sys_msgq_send(MSG_Q_IDqid,uint32buf[SYS_MAX_MSGLEN_INT],uint32options,TICKtimeout)

向指定消息队列发消息。

qid

MSGQID_T

消息队列ID,由sys_msgq_create返回

buf

16byte

消息包内容

发送选项,目前支持:

Q_OP_NORMAL:

普通消息,将被放在消息队列尾

Q_OP_URGENT:

紧急消息,将被放在消息队列头

timeout

当消息队列满时等待时间(对于pSOS系统无定义),支持以下值:

NO_WAIT:

不等待,直接返回

WAIT_FOREVER:

直至消息队列有空闲缓冲区才返回

others:

如果消息队列一直不空闲,等待时间timeout后返回

发送成功

发送失败,可能的错误码有:

ERR_QFULL:

队列满

ERR_TIMEOUT:

超时

ERR_OBJDEL:

等待过程中队列被删除

sys_msgq_create、sys_msgq_receive、sys_msgq_send_to_task

sys_msgq_receive

uint32sys_msgq_receive(

MSG_Q_IDqid,

uint32buf[SYS_MAX_MSGLEN_INT],

TICKtimeout)

从指定消息队列中收消息。

参数含义如下:

消息队列ID

消息包缓冲区

TICK

当消息队列中没有消息时等待时间,支持以下值:

SYS_NO_WAIT:

SYS_WAIT_FOREVER:

直至消息队列有包到达才返回

如果消息队列一直没有消息包到达,等待时间timeout后返回

接收成功

接收失败,可能的错误码有:

ERR_NOMSG:

队列空

sys_msgq_create、sys_msgq_send、sys_msgq_receive_from_task

sys_msgq_msgcount

uint32sys_msgq_msgcount(MSG_Q_IDqid)

取得指定队列中的待处理消息数量;

参数qid由sys_msgq_create返回

qid非法

消息数量

sys_msgq_peek

uint32sys_msgq_peek(MSG_Q_IDqid,uint32buf[SYS_MAX_MSGLEN_INT],TICKtimeout)

取得指定消息队列的第一个消息包,如果没有消息包则根据timeout参数进行等待;

qid由sys_msgq_create返回

错误,可能的错误码有

信号量管理

sys_sm_create

SEM_IDsys_sm_create(uint32options,uint32count);

创建一个信号量。

信号量选项,支持以下值:

SM_OP_PRIORITY:

被阻塞的任务按照优先级排列

SM_OP_FIFO:

被阻塞的任务按照先进先出顺序排列(默认设置)

SM_OP_MUTEX:

互斥量(默认不设置)

SM_OP_BINARY:

二元信号量(默认不设置,pSOS下不建议使用)

SM_OP_RECURSIVE:

是否可以递归P操作(相通任务可以多次对已经P操作的信号量再次P操作),只对互斥量有效(pSOS,默认设置;

VxWorks强制支持)

SM_OP_PRIO_INHERIT:

是否支持优先级继承,只对互斥量有效(默认设置,需要与SM_OP_PRIORITY同时使用,否则将被忽略)

count

信号量的初始值;

如果options设置了SM_OP_BINARY,则count为0时表示0,其它情况表示1

没有内存

信号量ID

sys_sm_delete

uint32sys_sm_delete(SEM_IDsid);

删除一个信号量;

所有阻塞于该信号量的任务将被解阻塞,对应函数返回错误;

参数sid由函数sys_sm_create返回

删除失败,可能的原因有:

非法的sid

sys_sm_p

uint32sys_sm_p(SEM_IDsid,TICKtimeout);

对一个信号量进行P操作,参数含义如下:

sid

当信号量计数器为零时的等待时间(SM_OP_MUTEX和SM_OP_RECURSIVE未都设置),允许以下值

不等待,直接返回错误

等待直到信号量有效

Others:

等待时间

只适用于信号量;

对于互斥量,请使用函数sys_sm_mutex_lock。

P操作成功

P操作失败,可能的错误码有

等待超时

ERR_NOSEM:

P操作失败,计数器已经为零

对象被删除

sys_sm_v、sys_sm_create

sys_sm_v

uint32sys_sm_v(SEM_IDsid);

对一个信号量进行V操作,参数sid由函数sys_sm_create返回。

对于互斥量,请使用函数sys_sm_mutex_unlock只有持有者才能对它进行V操作。

可能导致主调任务被抢占

V操作成功

V操作失败;

可能的原因有:

sys_sm_p、sys_sm_create

sys_sm_mutex_create

uint32sys_sm_mutex_create()

创建一个互斥量

内存不足,无法创建互斥量

互斥量的SEM_ID

sys_sm_mutex_delete

uint32sys_sm_mutex_delete(SEM_IDmutex)

删除一个互斥量

删除失败,可能的错误码有

互斥量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。

lock操作成功

失败,可能的错误码有:

ERR_MULOCKED:

互斥量已经被占用

ERR_TIMEOUT:

ERR_MUKILLD:

等待过程中互斥量被

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 简洁抽象

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2