Vxworks任务间通信.docxVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Vxworks任务间通信

[原]Vxworks任务间的通信 2015-4-13阅读29 评论0 vxworks中任务间的通信支持信号量、消息队列、管道、信号、事件、共享内存等。 一:信号量 信号量分二进制信号量、互斥信号量、计数信号量。 1:二进制信号量 (1)semBCreate():创建二进制信号量 SEM_ID semBCreate(int options,SEM_B_STATE initialState) options 可以为基于优先级的队列EM_Q_PRIORITY(0x1)或者是基于先进先出的队列SEM_Q_FIFO(0X0). initialState 可以是信号量初始化为满SEM_FULL(1)或者为空SEM_EMPTY(0)。 (2)semTake(): 获取信号量 STATUS semTake(SEM_ID semID,int timeout) semID为信号量ID。 timeout 表示任务一直等待信号量,直到可用WAIT_FOREVER(-1)或者不等待,直接下步操作NO_WAIT(0)。 (3)semGive():释放信号量 STATUS semGive(SEM_ID semID) (4)semFlush():唤醒信号量 STATUS semFlush(SEM_ID semID) 通过此函数可以将所有阻塞在信号量(WAIT_FOREVER)上的任务释放。 (5)semDelete():删除信号量 STATUS semDelete(SEM_ID semID) (6)semInfo():得到阻塞在信号量上的所有任务ID列表 int semInfo(SEM_ID semID,int idList[],int maxTasks) idList[]为要显示任务ID的数组。 maxTasks为要显示的任务最大数。 (7)semShow():显示信号量的相关信息 STATUS semShow(SEM_ID semID,int level) level分概括(0),详细(1)。 2:互斥信号量 互斥信号量相比二进制信号量增加了防止优先级倒置、递归访问等功能。 (1)semMCreate():创建互斥信号量 SEM_ID semMCreate(int options) options 的选项有: - SEM_Q_PRIORITY(0x1):需要获取信号量的任务基于优先级原则排列。 - SEM_Q_FIFO(0x0):需要获取信号量的任务基于先进先出原则排列。 - SEM_DELETE_SAFE(0x4):保护任务防止意外删除,当执行获取信号量(semtake)时操作时会默认执行任务保护 (taskSafe)操作,当执行释放信号量(semGive)操作时会默认执行取消任务保护(taskUnsafe)操作。 - SEM_INVERSION_SAFE(0x8):保护系统,防止系统出现优先级倒置现象。 - SEM_EVENTSEND_ERR_NOTIFY(0X10):任务发送事件失败时,会发送错误号。 (2)semMGiveForce():强制释放互斥信号量 STATUS semMGiveForce(SEM_ID semId) 3:计数信号量 计数信号量主要用于搜集某些信号量。 SEM_ID semCCreate(int options,int initialCount) options为信号量属性或类型 initialCount 初始化计数 /************************************************************************ 示例代码:以二进制信号量为例 STATUS task1(void); //声明两个任务 STATUS task2(void); int taskId1,taskId2; //全局变量任务ID SEM_ID semTest1,semTest2; //信号量 int initTask() //任务初始化 { taskId1=taskSpawn(task1,120,0,10240,(FUNCPTR)task1,0,0,0,0,0,0,0,0,0); //创建任务1 taskId2=taskSpawn(task2,120,0,10240,(FUNCPTR)task2,0,0,0,0,0,0,0,0,0); //创建任务2 semTest1=semBCreate(SEM_Q_PRIORITY,SEM_EMPTY); //创建信号量1 semTest2=semBCreate(SEM_Q_PRIORITY,SEM_EMPTY); //创建信号量2 if(s

文档评论(0)

bokegood + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档