文章目录

  • 一、前言
  • 二、实验的目的
  • 三、API
    • 3.1、osMessageQueueId_t
    • 3.2、osMessageQueueAttr_t
    • 3.3、osMessageQueueNew
  • 四、代码
    • 4.1、main.h
    • 4.2、main.c
  • 五、RTX RTOS调试程序

一、前言

在RTOS里,消息队列与线程一样都是非常重要的功能。在实际项目上,线程与消息队列肯定会使用。最常用的案例是串口中断回调函数将收到的字符放入消息队列,待串口中断回调函数结束后,线程立即从该消息队列里获取字符,接着按照通讯协议解释字符。

中断回调函数必须遵循快进快出的原则。所谓快进快出就是中断回调函数里的代码量需尽可能少,所以最好不要在中断回调函数里运行解释通讯协议的代码。此时,消息队列很好地解决了快进快出的问题。因为中断回调函数里只需运行将消息放入消息队列的代码,解析通讯协议的代码放在读取消息队列的线程里。

STM32工程:
链接:https://pan.baidu.com/s/1F7AXUObbZzQ7Dq0pJjM9oA
提取码:5dzr

二、实验的目的

创建一个消息队列。

三、API

3.1、osMessageQueueId_t

osMessageQueueId_t msgQueue_ID_CAN1;   //用于CAN1的消息队列ID

3.2、osMessageQueueAttr_t

/* 动态堆栈方式 */
/* CAN1消息队列属性 */
const osMessageQueueAttr_t msgQueue_CAN1_Attr =
{.name = "Message_Queue_CAN1",  /* 消息队列名字 *//* 其他都用默认 */
};

3.3、osMessageQueueNew

msgQueue_ID_CAN1   = osMessageQueueNew(MQ_SIZE,             /* 消息队列里存放消息的总数 */sizeof(put_Uart),    /* 消息的大小(单位: Byte)*/&msgQueue_CAN1_Attr  /* 消息队列的属性 */);

四、代码

4.1、main.h

4.2、main.c


使用动态堆栈的方式创建消息队列,只需从属性里配置消息队列的名字,其他均为默认值即可。


五、RTX RTOS调试程序

Keil提供的RTX RTOS功能,非常方便地调试RTX5程序。从下图看到,成功创建第一个消息队列。

RTX5 | 消息队列01 - 创建消息队列相关推荐

  1. 运用String.format格式化方法和消息枚举类型创建消息模板

    package com.han.StringFormat;import java.util.Date;/*** 运用String.format格式化方法和消息枚举类型创建消息模板* * @author ...

  2. RTX5 | 软件定时器01 - 创建一个软件定时器(单次运行)

    文章目录 一.前言 二.实验目的 三.API 3.1.osTimerNew 3.2.osTimerStart 四.代码 4.1.main.h 4.2.main.c 五.Event Recorder调试 ...

  3. RTX5 | 线程管理01 - 创建线程(静态堆栈方式)

    文章目录 一.前言 二.代码 2.1.main.h 2.1.main.c 三.DEBUG 四.细节补充 4.1.使用静态堆栈方式创建的线程只占用一点点RTX5上的内存 4.2.通过RTX RTOS窗口 ...

  4. java 消息队列服务_ActiveMQ 消息队列服务

    1 ActiveMQ简介 1.1 ActiveMQ是什么 ActiveMQ是一个消息队列应用服务器(推送服务器).支持JMS规范. 1.1.1 JMS概述 全称:Java Message Servic ...

  5. ABAP MESSAGE消息类的创建以及调用方法。

    消息类的类型一共分为六种,分别如下表所示 TYPE 描述 使用效果 是否终止事务 A(Abortion) 终止 在PUPUP画面显示 是 I(Information) 信息 在PUPUP画面显示 否 ...

  6. java栈和队列_栈和队列的面试题Java

    栈和队列: 面试的时候,栈和队列经常会成对出现来考察.本文包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min ...

  7. RocketMQ3.2.2生产者发送消息自动创建Topic队列数无法超过4个

    问题现象 RocketMQ3.2.2版本,测试时尝试发送消息时自动创建Topic,设置了队列数量为8: producer.setDefaultTopicQueueNums(8); 同时设置broker ...

  8. 消息队列控制灯代码_代码实现RabbitMQ死信队列的创建

    ‍ ‍前言:‍ ‍ 之前有写过死信队列的使用场景以及通过管控台创建死信.这次就通过代码实现死信队列的创建,同时也分享一下RabbitMQ封装的类. 准备: 1. 先准备一个死信队列(最后用来消费)的参 ...

  9. 【重难点】【RabbitMQ 01】消息队列的作用、主流的消息队列、RabbitMQ 基于什么传输消息、RabbitMQ 模型架构、死信队列和延迟队列

    [重难点][RabbitMQ 01]消息队列的作用.主流的消息队列.RabbitMQ 基于什么传输消息.RabbitMQ 模型架构.死信队列和延迟队列 文章目录 [重难点][RabbitMQ 01]消 ...

最新文章

  1. 杭州网络推广带大家了解404页面的作用以及对网站优化的优势
  2. Android开发第二次课 布局方式
  3. Spring期末试题
  4. sqlserver 2014 删除主键约束
  5. [react] 说说你对reader的context的理解
  6. STM32学习及应用笔记一:SysTick定时器学习及应用
  7. Djang(在前端仿DjangoAdmin同样效果)
  8. bzoj 1078 [SCOI2008]斜堆 —— 斜堆
  9. Go基础:函数与方法的区别
  10. 使用httpclient下载 页面、图片
  11. NTC热敏电阻应用-测温
  12. pert计算公式期望值_计划评审技术(PERT)求工期、标准差、方差以及概率
  13. 阿里云思维导图系列(一)开篇
  14. VUE + 微信分享
  15. 获取和设置默认打印机
  16. 【重点】心田花开:三年级教材知识点汇总
  17. 数仓、数据湖、湖仓一体、数据网格的探索与研究
  18. oracle计算sql运行时间,如何计算正在运行的SQL已经执行的时间?
  19. 约瑟夫·寇德卡:成为一个吉普赛人
  20. 关于NI PXI机箱及板卡的路由说明

热门文章

  1. Bounding-box_regression详解
  2. windows7+tomcat7+nginx1.11.3 +memcached
  3. SVN 服务器端的搭建-及多仓库管理-OK
  4. 原创-linux下编译器vi、vim的使用技巧
  5. Oracle审计功能
  6. 地产遇冷之际,行业竞争加剧,房企如何走出营销低谷,先声夺人?
  7. [视频]Google Chrome背后的故事
  8. 对USB驱动程序的理解(1)
  9. BATJ一线大公司需要什么样的前端
  10. 沈阳建筑大学c语言真题,沈阳建筑大学C语言复习资料.doc