Download presentation
Presentation is loading. Please wait.
Published byFarida Wibowo Modified 5年之前
1
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
《手把手教你学STM32-UCOS》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺: 技术论坛: 开源电子网 公众平台:“正点原子” 官方网站: 联系电话: ddddd ALIENTEK 淘宝店铺: 技术论坛:
2
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
《手把手教你学STM32-UCOS》 UCOSIII消息传递 适用平台 STM32F1xx 开发板 (正点原子) STM32F4xx 开发板 (正点原子) 淘宝店铺: 技术论坛:
3
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
目录 UCOSIII任务间通信 1 UCOSIII消息队列 2 UCOSIII任务内建消息队列 3 淘宝店铺: 技术论坛:
4
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
UCOSIII信号量和互斥信号量 参考资料: 战舰/精英/Mini STM32/STM32F4开发板 《STM32F4 UCOS开发手册》-第十一章 UCOSIII消息传递 《STM32F1 UCOS开发手册》-第十一章 UCOSIII消息传递 淘宝店铺: 技术论坛:
5
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、UCOSIII任务间通信 1.1、任务间通信: 一个任务或者中断服务程序有时候需要和另一个任务交流信息,这个就是消息 传递的过程就叫做任务间通信,任务间的消息传递可以通过2种途径:一是通过全局变量,二是通过发布消息。 使用全局变量的时候每个任务或者中断服务程序都必须保证其对全局变量的独占访问。消息也可以通过消息队列作为中介发布给任务。 淘宝店铺: 技术论坛:
6
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、UCOSIII任务间通信 什么是消息? 消息包含一下几个部分:指向数据的指针,数据的长度和记录消息发布时刻的 时间戳,指针指向的可以是一块数据区域或者甚至是一个函数。 消息的内容必须一直保持可见性,可见性是指代表消息的变量必须在接收消息的任务代码范围内有效。这是因为发布的数据采用的是指针传递,也就是引用传递,并不是值传递。也就是说,发布的消息本身并不产生拷贝,我们可以使用动态内存分配的方式来给消息分配一个内存块,或者,也可以传递一个指向全局变量、全局数据结构、全局数组或者函数的指针。 淘宝店铺: 技术论坛:
7
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
2、UCOSIII消息队列 消息队列是UCOSIII中的一个内核对象,为结构体OS_Q。 struct os_q { OS_OBJ_TYPE Type; CPU_CHAR *NamePtr; OS_PEND_LIST PendList; #if OS_CFG_DBG_EN > 0u OS_Q *DbgPrevPtr; OS_Q *DbgNextPtr; CPU_CHAR *DbgNamePtr; #endif OS_MSG_Q MsgQ //消息列表 }; 淘宝店铺: 技术论坛:
8
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
2、UCOSIII消息队列 OS_MSG_Q也是一个结构体,如下: struct os_msg_q { OS_MSG *InPtr; OS_MSG *OutPtr; OS_MSG_QTY NbrEntriesSize; OS_MSG_QTY NbrEntries; OS_MSG_QTY NbrEntriesMax; }; 淘宝店铺: 技术论坛:
9
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
2、UCOSIII消息队列 消息发布以后会被存放在OS_MSG类型的数据结构中,OS_MSG如下: struct os_msg { OS_MSG *NextPtr; void *MsgPtr; OS_MSG_SIZE MsgSize; CPU_TS MsgTS; }; 淘宝店铺: 技术论坛:
10
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
2、UCOSIII消息队列 淘宝店铺: 技术论坛:
11
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
2、UCOSIII消息队列 2.1、消息队列API函数: 函数名 作用 OSQCreate() 创建一个消息 队列 OSQDel() 删除一个消息队列 OSQFlush() 清空消息队列 OSQPend() 等待消息 OSQPendAbort() 取消等待消息 OSQPost() 向消息队列发布一则消息 淘宝店铺: 技术论坛:
12
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
3、UCOSIII任务内建消息队列 同任务内嵌信号量一样,UCOSIII的每个任务中也有内建消息队列。而且多个任务等待同一个消息队列的应用很少见,UCOSIII中每个任务多有其内建消息队列的话用户可以不用通过外部的消息队列而直接向任务发布消息。 如果需要使用任务内建消息队列功能的时候需要将宏OS_CFG_TASK_Q_EN置1来使能相关的代码。 函数名 作用 OSTaskQPend() 等待消息 OSTaskQPendAbort() 取消等待消息 OSTaskQPost() 向任务发布一则消息 OSTaskQFlush() 清空任务的消息队列 淘宝店铺: 技术论坛:
13
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
谢谢您对“正点原子”团队的支持 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺: 技术论坛: 淘宝店铺: 技术论坛:
Similar presentations