嵌入式系统学习——STM32之UCOS-III消息传递
来源:互联网 发布:学完c语言之后学java 编辑:程序博客网 时间:2024/06/11 15:18
UCOSIII任务间通信
一个任务或者中断服务程序有时候需要和另一个任务交流信息,这个就是消息,传递的过程就叫做任务间通信,任务间的消息传递可以通过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;#endifOS_MSG_Q MsgQ//消息列表};
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;};消息发布以后会被存放在OS_MSG类型的数据结构中,OS_MSG如下:
struct os_msg {OS_MSG *NextPtr; void *MsgPtr; OS_MSG_SIZE MsgSize; CPU_TS MsgTS;};
消息队列API函数:
同任务内嵌信号量一样,UCOSIII的每个任务中也有内建消息队列。而且多个任务等待同一个消息队列的应用很少见,UCOSIII中每个任务多有其内建消息队列的话用户可以不用通过外部的消息队列而直接向任务发布消息。
如果需要使用任务内建消息队列功能的时候需要将宏OS_CFG_TASK_Q_EN置1来使能相关的代码。
如果需要使用任务内建消息队列功能的时候需要将宏OS_CFG_TASK_Q_EN置1来使能相关的代码。
参考:开源电子网 STM32中文参考手册
阅读全文
0 0
- 嵌入式系统学习——STM32之UCOS-III消息传递
- 嵌入式系统学习——STM32之UCOS-III任务管理
- 嵌入式系统学习——STM32之UCOS-III中断和时间管理及软件定时器
- 嵌入式系统学习——STM32之UCOS-III信号量和互斥信号量
- 嵌入式系统学习——STM32之UCOS-III事件标志组和存储管理
- 嵌入式系统学习——STM32之UCOS-III任务基础API、时间片轮转调度和系统任务
- ucos-iii学习之消息传递
- 嵌入式系统学习——STM32之RTOS系统UCOS介绍与移植
- ucos-iii学习之系统内部任务
- ucos iii学习笔记——为什么选择ucos iii
- ucos iii学习笔记——为什么选择ucos iii
- 嵌入式系统学习——STM32之GPIO
- 嵌入式系统学习——STM32之跑马灯
- 嵌入式系统学习——STM32之按键输入
- 嵌入式系统学习——STM32之外部中断
- 嵌入式系统学习——STM32之通用定时器
- 嵌入式系统学习——STM32之串口通信UART
- 嵌入式系统学习——STM32之FATFS文件系统
- js开发:javascript中的this
- window.onload的用法
- C++获取数组长度
- 小谈网络游戏同步
- Ta-lib学习笔记02--K线模式识别
- 嵌入式系统学习——STM32之UCOS-III消息传递
- webpack---htmlWbpackPlugin插件在webpack中的应用
- win10 oracle11g彻底删除并重装
- samba服务
- Freeline 让AndroidStudio快的飞起来
- TortoiseGit安装与配置
- js开发:通过面向对象方式完成的拖拽功能
- SQLite笔记之基础命令
- Python的urllib3软件包的证书认证及警告的禁用