-
任务中断服务子系统——EMC DataDomain 2500存储设备维护手册
资源介绍
6.7 消息队列
消息队列是µC/OS-II中另一种通讯机制,它可以使一个任务或者中断服务子程序向另一个
任务发送以指针方式定义的变量。因具体的应用有所不同,每个指针指向的数据结构变量也有
所不同。为了使用µC/OS-II 的消息队列功能,需要在 OS_CFG.H 文件中,将 OS_Q_EN 常数设置
为 1,并且通过常数 OS_MAX_QS来决定µC/OS-II支持的最多消息队列数。
在使用一个消息队列之前,必须先建立该消息队列。这可以通过调用 OSQCreate()函数(见
6.07.01节),并定义消息队列中的单元数(消息数)来完成。
µC/OS-II提供了 7个对消息队列进行操作的函数:OSQCreate(),OSQPend(),OSQPost(),
OSQPostFront(),OSQAccept(),OSQFlush()和 OSQQuery()函数。图 F6.7是任务、中断服务子
程序和消息队列之间的关系。其中,消息队列的符号很像多个邮箱。实际上,我们可以将消息
队列看作时多个邮箱组成的数组,只是它们共用一个等待任务列表。每个指针所指向的数据结
构是由具体的应用程序决定的。N 代表了消息队列中的总单元数。当调用 OSQPend()或者
OSQAccept()之前,调用 N 次 OSQPost()或者 OSQPostFront()就会把消息队列填满。从图 F6.7
中可以看出,一个任务或者中断服务子程序可以调用 OSQPost(),OSQPostFront(),OSQFlush()
或者 OSQAccept()函数。但是,只有任务可以调用 OSQPend()和 OSQQuery()函数。