消息
- 一则消息包含几个部分:指向数据的指针、表明数据长度的变量、记录消息发布时刻的时间戳。
- 指针指向的可以是一块数据区或者一个函数。
- 消息的内容必须一直保持可见性,即消息的便令必须在接收消息的任务代码范围内有效。
消息队列
如图所示,消息通过OS_MSG_Q结构体组成一个消息队列,其中InPtr指针指向下一个消息插入的位置,OutPtr指针指向下一个将要取出的消息的位置。
在OS_MSG结构是消息的结构体,其中MsgSize顾名思义就是消息的长度参数,MsgTS就是消息的时间戳,而MsgPtr指针指向的就是数据区或者函数。
整体数据结构关系如下图所示:
任务自己也有一个内建的消息队列,通过内建消息队列可以更加简单快速的进行消息的操作。
同任务内嵌信号量一样,UCOSIII的每个任务中也有内建消息队列。而且多个任务等待同一个消息队列的应用很少见,UCOSIII中每个任务多有其内建消息队列的话用户可以不用通过外部的消息队列而直接向任务发布消息。
如果需要使用任务内建消息队列功能的时候需要将宏OS_CFG_TASK_Q_EN
置1来使能相关的代码。
消息的相关函数如下图所示:
下图是消息队列:
举个例子:
OSQCreate ((OS_Q* )&KEY_Msg,//消息队列
(CPU_CHAR* )"KEY Msg",//消息队列名称
(OS_MSG_QTY )KEYMSG_Q_NUM,//消息队列长度
(OS_ERR* )&err); //返回错误信息
其他的函数差不多同理,可以自行查看源码,离开源码是无法知晓具体流程的!!!!!