《嵌入式应用技术》课件——第8讲 UCOSIII消息传递.pdf
《嵌入式技术应用》课程
uCOSIII操作系统学习
适用平台:STM32F10x
主讲教师:杜锋
UCOSIII消息传递
目录
Contents
1
UCOSIII任务间通信
2
UCOSIII消息队列
3知识目标
UCOSIII任务内建消息队列
了解知道
掌握了解
掌握理解
掌握
1.UCOSIII任务间通信
任务间通信
◆消息:一个任务或者中断服务程序有时候需要和另一个任务交流信息,这个就是消息
◆消息传递的过程就叫做任务间通信
◆任务间的消息传递可以通过2种途径:
●一是通过全局变量
●二是通过发布消息
◆使用全局变量的时候每个任务或者中断服务程序都必须保证其对全局变量的独占访问
◆消息也可以通过消息队列作为中介发布给任务
1.UCOSIII任务间通信
消息说明
◆消息包含一下几个部分:指向数据的指针,数据的长度和记录消息发布时刻的时间戳,指针指
向的可以是一块数据区域或者甚至是一个函数。
◆消息的内容必须一直保持可见性,可见性是指代表消息的变量必须在接收消息的任务代码
范围内有效。
◆这是因为发布的数据采用的是指针传递,也就是引用传递,并不是值传递。也就是说,发布的
消息本身并不产生拷贝,我们可以使用动态内存分配的方式来给消息分配一个内存块,或者,也
可以传递一个指向全局变量、全局数据结构、全局数组或者函数的指针。
2.UCOSIII消息队列
消息队列
消息队列是UCOSIII中的一个内核对象,为结构体OS_Q。
structos_q{
OS_OBJ_TYPEType;
CPU_CHAR*NamePtr;
OS_PEND_LISTPendList;
#ifOS_CFG_DBG_EN0u
OS_Q*DbgPrevPtr;
OS_Q*DbgNextPtr;
CPU_CHAR*DbgNamePtr;
#endif
OS_MSG_QMsgQ//消息列表
};
2.UCOSIII消息队列
OS_MSG_Q也是一个结构体,如下:
structos_msg_q{
OS_MSG*InPtr;
OS_MSG*OutPtr;
OS_MSG_QTYNbrEntriesSize;
OS_MSG_QTYNbrE