首页 VxWorks编程常用函数说明

VxWorks编程常用函数说明

举报
开通vip

VxWorks编程常用函数说明VxWorks编程常用函数说明一、官方的ProgramGuide位于安装目录下:\docs\vxworks\guide\index.html二、常用的库:#include"taskLib.h"/*任务*/#include"msgQLib.h"/*消息队列*/#include"semLib.h"/*信号量*/#include"ioLib.h"/*IO*/#include"wdLib.h"/*Watchdog*/#include"logLib.h"/*信息输出*/#include"socket.h"/*网络套接字*/三...

VxWorks编程常用函数说明
VxWorks编程常用函数说明一、官方的ProgramGuide位于安装目录下:\docs\vxworks\guide\index.html二、常用的库:#include"taskLib.h"/*任务*/#include"msgQLib.h"/*消息队列*/#include"semLib.h"/*信号量*/#include"ioLib.h"/*IO*/#include"wdLib.h"/*Watchdog*/#include"logLib.h"/*信息输出*/#include"socket.h"/*网络套接字*/三、IO系统:ioLib.h1、系统中的IO设备,包括键盘、串口、文件等,都用统一的接口访问。第一步通常先得到文件描述符,然后进行读写或者设置的工作,最后关闭该描述符。creat:建立文件open:得到文件或设备的描述符read:读文件或设备write:写文件或设备ioctl:设置参数close:关闭文件描述符remove:删除文件2、内存文件memDrv()-初始化伪内存设备memDevCreate()-建立伪内存设备memDevCreateDir()-建立一组伪内存设备memDevDelete()-删除伪内存设备Init(){uchar_tbuffer[1024];intfd;memDrv();memDevCreate("/mem/mem1",buffer,sizeof(buffer));if((fd=open("/mem/mem1",O_RDWR,0644))!=ERROR){write(fd,&data,sizeof(data));……close(fd);}memDevDelete("/mem/mem1");}3、通过Select函数实现多个IO监听:selectLib.h当等待多个IO时,我们可以使用Select函数,fd为文件描述符:intselect(intwidth,/*最大的fd,或直接FD_SETSIZE(2048)*/fd_set*pReadFds,/*读的fd集合*/fd_set*pWriteFds,/*写的fd集合*/fd_set*pExceptFds,/*vxWorks不支持,NULL*/structtimeval*pTimeOut/*等待时间,NULL=forever*/)还有几个宏:FD_SET(fd,&fdset)设置fd的监听位FD_CLR(fd,&fdset)清除fd的监听位FD_ZERO(&fdset)清除所有监听位FD_ISSET(fd,&fdset)fd是否有数据例子,其中MAX意为取最大值:Init(){structfd_setreadFds;intfds[4];intwidth;fds[0]=open(..);……;fds[3]=open(..);/*打开IO*/width=MAX(fds[0],……,fds[3])+1;/*fd的最大值+1*//*FOREVER{*/FD_ZERO(&readFds);/*设置fd_set结构*/FD_SET(fds[0],&readFds);……;FD_SET(fds[3],&readFds);if(select(width,&readFds,NULL,NULL,NULL)==ERROR){/*监听*/close(fds[0]);……;close(fds[3]);return;}for(i=0;i0){/*这里任务会阻塞*/printf("Receivedfrompipe:%c",ch);}}3)二进制信号量Init(){/*创建二进制信号量*/if((semBID=semBCreate(SEM_Q_FIFO,SEM_EMPTY))==NULL){printf("Binarysemaphorecreatefailed!\n");}}taskSend(){semGive(semBID);}taskReceive(){semTake(semBID,WAIT_FOREVER);/*这里任务会阻塞*/}4)事件:eventLib发送事件要指定目标任务的IDeventReceive()-等待事件eventSend()-发送事件eventClear()-清除当前任务的事件.taskSend(){if(OK!=eventSend(taskReceiveID,0×00000001)){printf("Eventsendfailed!");}}taskReceive(){UINT32Ev;if(OK!=eventReceive(0×00ffffff,EVENTS_WAIT_ANY,WAIT_FOREVER,&Ev)){printf("eventReceiveError!\n");}else{Ev&=0×00000001;if(Ev){printf("Event%dreceived!",Ev);}}}五、Watchdog:wdLib.h系统提供了软看门狗定时器,使用也简便:wdCreate()-创建看门狗wdDelete()-删除wdStart()-启动wdCancel()-停止Init(){/*创建看门狗*/if((wdID=wdCreate())==NULL){printf("Watchdogcreatefailed!\n");}}task(){if(OK!=wdStart(wdID,sysClkRateGet()*5,proc_wd,0)){printf("Watchdogstartfailed!\n");}}intproc_wd(intparam){logMsg(……);}六、网络编程:sockLib.h使用 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 的BSDSocket套接字,使用TCP或者UDP 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 进行通讯。socket()-打开套接字bind()-与端口、地址等绑定listen()-监听模式accept()-允许对方的连接connect()-主动与远端连接connectWithTimeout()-超时功能的connect函数sendto()-发送send()-发送sendmsg()-发送recvfrom()-接收recv()-接收recvmsg()-接收setsockopt()-设定套接字参数getsockopt()-得到套接字参数getsockname()-得到套接字名称getpeername()-得到连接的对点的名称shutdown()-关闭连接七、异常处理1、错误号:errnoLib.h32位有符号整数,1~500被系统占用,其他程序内可用。如#defineMEMORY_LEAK0×20005errnoGet()-得到当前任务的错误号errnoOfTaskGet()-得到指定任务的错误号errnoSet()-设定当前任务的错误号errnoOfTaskSet()-设定指定任务的错误号2、信号:sigLib.hsignal()-指定信号的入口函数raise()-发送信号给当前任务kill()-发送信号给指定任务task1(){signal(30,proc_sig);/*注册30号的信号*//*raise(30);*/}task2(){kill(task1ID,30);}voidproc_sig(intparam){logMsg("Errormessage…");}八、中断:iv.hx86的0×0~0xf号中断对应vxWorks中0×20~0×2f号中断以9号中断为例:初始化中断:intConnect(INUM_TO_IVEC(9+0×20),Int9Handler,0);/*绑定中断函数*/sysIntEnablePIC(9);/*使能9号中断*/中断函数原型:voidInt9Handler(intParam);/*注意中断函数中不要调用阻塞函数*/
本文档为【VxWorks编程常用函数说明】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
绘画的问号
暂无简介~
格式:txt
大小:7KB
软件:记事本
页数:0
分类:
上传时间:2019-05-22
浏览量:1