- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2消息队列实验
2.6 消息队列实验 2.6.1 实验目的 ? 掌握嵌入式实时操作系统 μC/OS-II 中消息队列机制的基本原理和使用方法。 2.6.2 实验设备 ? 硬件:STM32 实验平台,ULINK2 仿真器套件,PC 机; ? 软件:μVision IDE for ARM 集成开发环境。 2.6.3 实验设计 在本实验中,设计了 6 个普通应用任务:Task1(优先级为 1)、Task2(优先级为 2)、Task3(优先级为 3)、Task4(优先级为 4)、Task5(优先级为 5)、Task6(优先级为 6),以及一个控制任务 TaskCon(优先级为 7)。 μC/OS-II 中,等待消息的任务总是按照优先级的高低来决定获得消息的顺序的。具体的设计思路为: 创建队列的功能:创建一个等待属性为 FIFO 的消息队列 1;创建一个等待属性为 LIFO 的消息队列 2。 考察以 FIFO 方式释放消息的消息队列:由任务 Task1、Task2、Task3 等待队列 1 中的消息。Task1、Task2、Task3 使用相同的任务代码(Taskq1 函数)。 考察以 LIFO 方式释放消息的消息队列:由任务 Task4、Task5、Task6 等待队列 2 中的消息。Task4、Task5、Task6 使用相同的任务代码(Taskq2 函数)。 考察删除消息队列的安全性: 在任务 Task4、Task5、Task6 等待队列 2 中的消息的过程中,让 TaskCon 删除队列 2;当队列 2 被删除后,检查任务 Task4、Task5、Task6 调用接收消息的函数是否返回错误码。 2.6.4 本实验中所用到的 μC/OS-II 相关函数 1. OSQCreate() 该函数用于建立一个消息队列。任务或中断可以通过消息队列向一个或多个任务发送消息。消息的含义是和具体的应用密切相关的。 函数原型:OS_EVENT *OSQCreate( void **start, INT8U size); 参数说明:start 是消息内存区的首地址,消息内存区是一个指针数组。 Size 是消息内存区的大小。 返回值:OSQCreate()函数返回一个指向消息队列控制块的指针。如果没有空闲的控制块,OSQCreate()函数返回空指针。 2. OSQPend() 该函数用于任务等待消息。消息通过中断或任务发送给需要的任务。消息是一个指针变量,在不同的应用中消息的具体含义不同。如果调用 OSQPend()函数时队列中已经存在消息,那么该消息被返回给 OSQPend()函数的调用者,该消息同时从队列中清除。如果调用 OSQPend()函数时队列中没有消息,OSQPend()函数挂起调用任务直到得到消息或超出定义的超时时间。如果同时有多个任务等待同一个消息,μC/OS-默认最高优先级的任务取得消息。一个由STaskSuspend()函数挂起的任务也可以接受消息,但这个任务将一直保持挂起状态直到通过调用 OSTaskResume()函数恢复任务的运行。 函数原型:Void *OSQPend( OS_EVENT *pevent, INT16U timeout, INT8U *err); 参数:pevent 是指向消息队列的指针,该指针的值在建立该队列时可以得到。(参考OSMboxCreate()函数)。 Timeout 允许一个任务以指定数目的时钟节拍等待消息。超时后如果还没有得到消息则恢复成就绪状态。如果该值设置成零则表示任务将持续地等待消息,最大的等待时间为65535 个时钟节拍。这个时间长度并不是非常严格的,可能存在一个时钟节拍的误差。 Err 是指向包含错误码的变量的指针。OSQPend()函数返回的错误码可能为下述几种: OS_NO_ERR :消息被正确地接受。 OS_TIMEOUT :消息没有在指定的时钟周期数内接收到消息。 OS_ERR_PEND_ISR :从中断调用该函数。虽然规定了不允许从中断中调用该函数,但μC/OS-仍然包含了检测这种情况的功能。 OS_ERR_EVENT_TYPE :pevent 不是指向消息队列的指针。 返回值: OSQPend()函数返回取得的消息并将*err 置为 OS_NO_ERR。如果没有在指定数目的时钟节拍内接受到消息,OSQPend()函数返回空指针并将*err 设置为 OS_TIMEOUT。 3. OSQPostFront() 该函数用于向消息队列发送消息。OSQPostFront()函数和 OSQPost()函数非常相似,不同之处在于 OSQPostFront()函数将发送的消息插到消息队列的最前端。也就是说,OSQPostFront()函数使得消息队列按照后入先出(LIFO)的方式工作,而不是先入先
您可能关注的文档
最近下载
- 外研版 九年级英语(上册)写作范文.pdf VIP
- IgorPro中文操作手册.pdf VIP
- 剧本杀剧本之电梯惊魂 6人开放.doc VIP
- 高二年级上学期数学常见公式与结论..doc VIP
- 老年人高血压健康知识宣教PPT课件.pptx VIP
- GB∕T 36034-2018 埋弧焊用高强钢实心焊丝、药芯焊丝和焊丝-焊剂组合分类要求(高清版).pdf
- 领导班子巡察整改专题民主生活会对照检查材料三篇.pdf VIP
- JJG 1189.3—2022 测量用互感器第3部分:电力电流互感器.pdf
- 2022年天津市初中学业水平考试生物试题 .pdf VIP
- 全国说课比赛一等奖课件.精品.ppt VIP
文档评论(0)