- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第七章任务间的同步与通讯之消息队列.ppt
第七章 任务间的同步与通讯
消息队列
什么是消息队列:消息队列数据结构
消息队列的操作函数使用
可定义一个指针数组。让数组的每个元素都存放一个消息缓冲区指针,那么任务就可通过传递这个指针数组指针的方法来传递多个消息了。这种可以传递多个消息的数据结构叫做消息队列。
用来传递多个消息
什么是消息队列
第七章 任务间的同步与通讯
消息队列
什么是消息队列:用来传递多个消息
消息队列数据结构
消息队列的操作函数使用
指针
消息队列
任务1
任务2
两个任务使用消息队列进行通信的示意图
…
…
消息缓冲区1
消息缓冲区n
消息缓冲区2
消息缓冲区指针数组
三部分组成
消息队列的数据结构
事件控制块
消息队列
消息
OS_EVENT_TYPE_Q
OS_Q结构
typedef struct os_q {
struct os_q *OSQPtr
void **OSQStart; void **OSQEnd;
void **OSQIn;
void **OSQOut; INT16U OSQSize; INT16U OSQEntries; 。} OS_Q;
初始化后
消息缓冲区
第七章 任务间的同步与通讯
消息队列
什么是消息队列:用来传递多个消息
消息队列数据结构
消息队列的操作函数使用
消息队列函数一览表
消息队列配置常量一览表
消息队列的操作
OSQCreate()
OSQDel()
OSQPend()
OSQPost()
OSQPostFront()
OSQPostOpt()
OSQAccept()
OSQFlush()
OSQQuery()
建立一个消息队列,OSQCreate()
OSQCreate()的函数原型如下:
OS_EVENT *OSQCreate( void **start, INT8U size);
参数:
Start:是消息内存区的基地址,消息内存区是一个指针数组。
Size:是消息内存区的大小。
返回值:
OSQCreate()函数返回一个指向消息队列事件控制块的指针。如果没有空余的事件空闲块,OSQCreate()函数返回空指针。
示例
OS_EVENT?*Semaphore;?
void?*Msg_Group[10];??
??
char?Msg_Arr[10][30];??
Semaphore?=?OSQCreate(Msg_Group,10);??
事件
消息队列
消息
消息队列的操作
OSQCreate()
OSQDel()
OSQPend()
OSQPost()
OSQPostFront()
OSQPostOpt()
OSQAccept()
OSQFlush()
OSQQuery()
删除消息队列——OSQDel()
函数原型 OS_EVENT *OSQDel(OS_EVENT *pevent,INT8U opt,INT8U *err)参数: (1) ?pevent:指向即将接收消息的队列的指针,其值在建立该队列时可以得到。
(2) ?opt:定义消息队列删除条件的选项。它有如下两种选择: ① OS_DEL_NO_PEND:只能在没有任何任务等待该消息队列的消息时,才能删除消息队列。 ② OS_DEL_ALWAYS:不管有没有任务在等待消息队列的消息,都立即删除消息队列。删除后,所有等待消息的任务立即进入就绪状态。
(3) ?err: ① OS_NO_ERR:调用成功,消息队列已被删除。 ② OS_ERR_DEL_ISR:试图在中断服务子程序中删除消息队列。 ③ OS_ERR_INVALID_OPT:无效的opt参数,用户没有将opt定义为正确的选择。 ④ OS_ERR_EVENT_TYPE:pevent不是指向消息队列的指针。 ⑤ OS_ERR_PEVENT_NULL:已经没有OS_EVENT数据结构可以使用。
消息队列的操作
OSQCreate()
OSQDel()
OSQPend()
OSQPost()
OSQPostFront()
OSQPostOpt()
OSQAccept()
OSQFlush()
OSQQuery()
等待一个消息队列中的消息,OSQPend()
函数原型如下:
void *OSQPend( OS_EVENT *pevent, INT16U timeout, INT8U *err);
参数:
pevent:指向即将接收消息的队列的指针。
timeout:允许一个任务在经过了指定数目的时钟节拍后还没有得到需要的消息时恢复运行状态。
err:指向包含错误码的变量的
您可能关注的文档
- 第4章静态路由.ppt
- 第5章可编程控制器及应用.ppt
- 第4章微处理器指令系统.ppt
- 第4章数据链路层-Read.ppt
- 第5章视频显示基础.ppt.ppt
- 社保卡数据确认教程-大连人才网.ppt
- 第4章-多媒体设备(PPS文件).ppt
- 第6章网络多媒体技术-西安交通大学多媒体技术及应用.ppt
- 第5章维护指南.doc
- 第6章嵌入式开发环境的建立.ppt.ppt
- 小学数学竞赛:量子加密通信原理在小学数学竞赛中的应用研究教学研究课题报告.docx
- 《民间美术在民间艺术传承与教育设计中的传承与创新实践探索》教学研究课题报告.docx
- 《商业银行金融产品创新与风险管理协同发展的风险防范策略创新路径研究》教学研究课题报告.docx
- 九年级语文下册第六单元〈与妻书〉教学设计与核心内容提炼.pdf
- 《呼吸系统感染抗菌药物临床应用中的药物不良反应监测与临床管理》教学研究课题报告.docx
- 《基于大数据的环境应急管理决策支持系统在公共健康安全中的应用》教学研究课题报告.docx
- 《电影院观影体验提升策略与顾客口碑传播的顾客体验管理创新策略创新策略研究》教学研究课题报告.docx
- 采石矶风景区.doc
- 初中地理环境保护教学智慧教育云平台资源检索与分类策略教学研究课题报告.docx
- 高中校园文化建设中科技创新特色活动对学生创新能力的培养教学研究课题报告.docx
文档评论(0)