2消息队列实验

2消息队列实验

ID:21173723

大小:124.64 KB

页数:12页

时间:2018-10-20

2消息队列实验_第1页
2消息队列实验_第2页
2消息队列实验_第3页
2消息队列实验_第4页
2消息队列实验_第5页
资源描述:

《2消息队列实验》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、2.6消息队列实验2.6.1实验目的掌握嵌入式实时操作系统gC/OS-II屮消息队列机制的基本原理和使用方法。2.6.2实验设备硬件:STM32实验平台,ULINK2仿真器套件,PC机;软件:VisionIDEforARM集成开发环境。2.6.3实验设计在本实验中,设计了6个普通应用任务:Taskl(优先级为1)、Task2(优先级为2)、Task3(优先级为3)、Task4(优先级为4)、Task5(优先级为5)、Task6(优先级为6),以及一个控制任务TaskCon(优先级为7)。pC/OS-II屮,等待消息的任务总是按照优先级的商低来决定获得消息的顺序的。具体的设计思路为:•创

2、建队列的功能:创建一个等待属性为FIFO的消息队列1;创建一个等待属性为LIFO的消息队列2。•考察以FIFO方式释放消息的消息队列:由任务Taskl、Task2、Task3等待队列1屮的消息。Taskl、Task2、Task3使用相同的任务代码(Taskql函数)。•考察以LIFO方式释放消息的消息队列:由任务Task4、Task5、Task6等待队列2屮的消息。Task4、Task5、Task6使用相同的任务代码(Taskq2函数)。•考察删除消息队列的安全性:在任务Task4、Task5、Task6等待队列2中的消息的过程中,让TaskCon删除队列2;当队列2被删除后,检查任务

3、Task4、Task5、Task6调川接收消息的函数是否返冋错误码。2.6.4本实验中所用到的gC/OS-II相关函数1.OSQCrcatc()该函数用于建立一个消息队列。任务或屮断可以通过消息队列14一个或多个任务发送消息。消息的含义是和具体的应用密切相关的。函数原型:OS_EVENT*OSQCreate(void**start,INT8Usize);参数说明:start是消息内存区的首地址,消息闪存区是一个指针数组。Size是消息内存K的大小。返M值:OSQCreatcO函数返冋一个指向消息队列控制块的指针。如果没有空闲的控制块,OSQCreate()函数返回空指针。2.OSQPe

4、nd()该函数用于任务等待消息。消息通过中断或任务发送给耑要的任务。消息是一个指针变量,在不同的应用屮消息的具体含义不同。如果调用OSQPcnd()函数时队列中已经存在消息,那么该消息被返回给OSQPcnd()函数的凋用者,该消息同时从队列中清除。如果调用OSQPend()阑数时队列中没有消息,OSQPend()闲数挂起调用任务直到得到消息或超出定义的超时时间。如果同时有多个任务等待同一个消息,pC/OS-II默认最高优先级的任务収得消息。一个由STaskSuspend()函数挂起的任务也可以接受消息,但这个任务将一直保持挂起状态直到通过调用OSTaskResume()函数恢复任务的运

5、行。函数原型:Void*OSQPcnd(OS_EVENT*pcvcnt,INT16Utimeout,INT8U*crr);参数:pevent是指向消息队列的指针,该指针的值在建立该队列时可以得到。(参考OSMboxCreate()闲数)。Timeout允许一个任务以指定数目的时钟节拍等待消息。超时后如果还没有得到消息则恢复成就绪状态。如果该值设置成零则表示任务将持续地等待消息,最大的等待时间为65535个时钟节拍。这个时间长度并不是非常严格的,可能存在一个时钟节拍的误差。Err是指向包含错误码的变量的指针。OSQPendO函数返冋的错误码可能为下述儿种:•OSNOERR:消息被正确地接

6、受。•OS_TIMEOUT:消息没有在指定的时钟周期数内接收到消息。•OS_ERR_PEND_ISR:从中断调用该函数。虽然规定了不允许从中断中调用该函数,但pC/OS-n仍然包含了检测这种情况的功能。•OS_ERR_EVENT_TYPE:pevent不是指向消息队列的指针。返冋值:OSQPend()函数返回取得的消息并将*err置为OS_NO_ERR。如果没有在指定数0的时钟节拍内接受到消息,OSQPend()函数返冋空指针并将*err设置为OS_TIMEOUT。1.OSQPo$tFront()该函数用于向消息队列发送消息。OSQPostFront()函数和OSQPost()函数非常

7、相似,不同之处在于OSQPostFront()函数将发送的消息插到消息队列的最前端。也就是说,OSQPostFront()函数使得消息队列按照后入先出(LIFO)的方式工作,而不是先入先出(FIFO)。消息是一个指针长度的变量,在不同的应用中消息的含义也可能不同。如果队列中已经存满消息,则此调用将返冋错误码。OSQPost()函数也是如此。在调用此函数时如果有任何任务在等待队列屮的消息,则最高优先级的任务将得到这个消息。如果等待消息的任务优先级

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。