FreeRTOS学习之路,以STM32F103C8T6为实验MCU(2-5:队列)

学习之路主要为FreeRTOS操作系统在STM32F103(STM32F103C8T6)上的运用,采用的是标准库编程的方式,使用的IDE为KEIL5。

注意!!!本学习之路可以通过购买STM32最小系统板以及部分配件的方式进行学习,也可以通过Proteus仿真的方式进行学习。

后续文章会同时发表在个人博客(jason1016.club)、CSDN;

视频会发布在bilibili(UID:399951374)

一、FreeRTOS队列概念

在实际的应用中,常常会遇到一个任务或者中断服务需要和另外一个任务进行“沟通交流”,这个“沟通交流”的过程其实就是消息传递的过程。在没有操作系统的时候两个应用程序进行消息传递一般使用全局变量的方式,但是如果在使用操作系统的应用中用全局变量来传递消息就会涉及到“资源管理”的问题。FreeRTOS 对此提供了一个叫做“队列”的机制来完成任务与任务、任务与中断之间的消息传递

数据储存

通常队列采用先进先出(FIFO)的存储缓冲机制,也就是往队列发送数据的时候(也叫入队)永远都是发送到队列的尾部,而从队列提取数据的时候(也叫出队)是从队列的头部提取的。但是也可以使用 LIFO 的存储缓冲,也就是后进先出,FreeRTOS 中的队列也提供了 LIFO 的存储缓冲机制。

多任务访问

队列不是属于某个特别指定的任务的,任何任务都可以向队列中发送消息,或者从队列中提取消息。

出队阻塞

为防止任务接收传输队列时,队列还没有消息,导致任务接收空信息的情况下,设置了出队阻塞。

当任务尝试从一个队列中读取消息的时候可以指定一个阻塞时间,这个阻塞时间就是当任务从队列中读取消息无效的时候任务阻塞的时间。出队就是就从队列中读取消息,出队阻塞是针对从队列中读取消息的任务而言的。

出队阻塞有三种模式

不阻塞

不等待,直接读

阻塞时间为 0

阻塞

等一段时间,等不到就走

阻塞时间为0~portMAX_DELAY

超级阻塞

等你等到死

阻塞时间为portMAX_DELAY

入队阻塞

入队说的是向队列中发送消息,将消息加入到队列中。和出队阻塞一样,当一个任务向队列发送消息的话也可以设置阻塞时间。

阻塞状态同上。

二、队列创建

动态队列创建

xQueueCreate()

静态队列创建

xQueueCreateStatic()

//动态创建
QueueHandle_t xQueueCreate(UBaseType_t uxQueueLength,//消息队列长度
                           UBaseType_t uxItemSize)   //消息的大小
/*返回值:
    其他值: 队列创捷成功以后返回的队列句柄!
    NULL: 队列创建失败。*/                                                                                 
                           
//静态创建
QueueHandle_t xQueueCreateStatic(UBaseType_t uxQueueLength,
                                 UBaseType_t uxItemSize,
                                 uint8_t * pucQueueStorageBuffer,
                                 StaticQueue_t * pxQueueBuffer)                                                                                                                

三、队列操作

3.1向队列发送消息

BaseType_t xQueueSend( QueueHandle_t xQueue,        //队列句柄
                       const void * pvItemToQueue,  //要发送的信息
                       TickType_t xTicksToWait);    //阻塞时间
/*返回值:
    pdPASS: 向队列发送消息成功!
    errQUEUE_FULL: 队列已经满了,消息发送失败。*/

3.2队列接收信息

BaseType_t xQueueReceive(QueueHandle_t xQueue,     //队列句柄
                         void * pvBuffer,          //保存数据的缓冲区
                         TickType_t xTicksToWait); //阻塞时间
/*返回值:
    pdTRUE: 从队列中读取数据成功。
    pdFALSE: 从队列中读取数据失败。*/

3.3队列上锁与解锁

队列上锁

prvLockQueue()

队列解锁

prvUnlockQueue()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/187088.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Robust taboo search for the quadratic assignment problem-二次分配问题的鲁棒禁忌搜索

文章目录 摘要关键字结论研究背景1. Introduction 常用基础理论知识2. The quadratic assignment problem3. Taboo search3.1. Moves3.2 Taboo list3.3. Aspiration function3.4. Taboo list size4. Random problems5. Parallel taboo search 研究内容、成果7. Conclusion 潜在…

Spring AOP:什么是AOP? 为什么要用AOP?如何学习AOP?

文章目录 🎆前言1.为什么要用 AOP3.如何学习去 AOP?3.1 AOP 的组成切面(Aspect)连接点(Join Point)切点(Pointcut)通知(Advice) 3. Spring AOP 实现3.1 普通的方式实现 …

画中画视频剪辑:如何实现多画面融合,提升创作质量

在视频剪辑的过程中,画中画是一种常见的技巧,它能够将多个画面融合在一起,创造出一种独特的效果,增强视频的观赏性和表现力。这种技巧常常用于电影、电视和广告中,以增加视觉冲击力,引导注意力,…

系列十五、BeanDefinition

一、BeanDefinition 1.1、概述 BeanDefinition是一个接口,主要负责存储bean的定义信息,决定bean的生产方式,类似于说明书。后续BeanFactory就可以根据这些信息生产bean了。比如实例化:可以通过反射得到实例对象;比如&…

人工智能Keras图像分类器(CNN卷积神经网络的图片识别篇)

上期文章我们分享了人工智能Keras图像分类器(CNN卷积神经网络的图片识别的训练模型),本期我们使用预训练模型对图片进行识别:Keras CNN卷积神经网络模型训练 导入第三方库 from keras.preprocessing.image import img_to_array from keras.models import load_model impor…

宝塔 Linux 面板安装一个高大上的论坛程序 —— Flarum

这个是很早搭建的版本,基于宝塔面板,比较复杂,如果想要简单的搭建方法,可以参看咕咕新写的这篇: 【好玩的 Docker 项目】10 分钟搭建一个高大上的论坛程序 购买腾讯云轻量应用服务器 待补充 登录服务器 待补充 BBR 加速脚本 BBR 加速脚本: BASH cd /usr/src &…

Springboot3+vue3从0到1开发实战项目(一)

一. 可以在本项目里面自由发挥拓展 二. 知识整合项目使用到的技术 后端开发 : Validation, Mybatis,Redis, Junit,SpringBoot3 ,mysql,Swagger, JDK17 ,JWT,项目部署 前端开发: Vue3,Vite&am…

类和对象(4)——补充内容+DateOJ题

Date类型的OJ 一,static成员例题 二,DateOJ题一,[计算日期到天数转换](https://www.nowcoder.com/practice/769d45d455fe40b385ba32f97e7bcded?tpId37&&tqId21296&rp1&ru/activity/oj&qru/ta/huawei/question-ranking)1…

【阿里云】图像识别 智能分类识别 增加垃圾桶开关盖功能点和OLED显示功能点(二)

一、增加垃圾桶开关盖功能 环境准备 二、PWM 频率的公式 三、pthread_detach分离线程,使其在退出时能够自动释放资源 四、具体代码实现 图像识别数据及调试信息wget-log打印日志文件 五、增加OLED显示功能 六、功能点实现语音交互视频 一、增加垃圾桶开关盖功能…

Linux:创建进程 -- fork,到底是什么?

相信大家在初学进程时,对fork函数创建进程一定会有很多的困惑,比如: 1.fork做了什么事情?? 2.为什么fork函数会有两个返回值?3.为什么fork的两个返回值,会给父进程谅回子进程pid,给子进程返回0?4.fork之后:父子进…

Oracle SQL 注入上的 Django GIS 函数和聚合漏洞 (CVE-2020-9402)

漏洞描述 Django 于2020年3 月4日发布了一个安全更新,修复了 GIS 函数和聚合中的 SQL 注入漏洞。 参考链接: Django security releases issued: 3.0.4, 2.2.11, and 1.11.29 | Weblog | Django 该漏洞要求开发者使用 JSONField/HStoreField;此外&…

Windows环境搭建

Windows环境搭建 一. jdk1.8安装1. 资源链接2. 安装3. 配置环境变量 一. jdk1.8安装 1. 资源链接 资源链接 提取码:tfms 2. 安装 1.双击下载好的JDK,点击下一步。 2.修改默认目录(可不修改),点击下一步, 3. 点击下…

YB4556 28V、1A、单节、线性锂电池充电IC

YB4556 28V 、 1A 、单节、线性锂电池充电 IC 概述: YB4556H 是一款完整的采用恒定电流 / 恒定电压的高压、大电流、单节锂离子电池线性充电 IC。最高耐压可达 28V,6.5V 自动过压保护,充电电流可达 1A。由于采用了内部 PMOSFET 架构,加上防倒…

PHP 针对mysql 自动生成数据字典

PHP 针对mysql 自动生成数据字典 确保php 可以正常使用mysqli 扩展 这里还需要注意 数据库密码 如果密码中有特殊字符 如: 首先,我们需要了解MySQL中的特殊字符包括哪些。MySQL中的特殊字符主要包括以下几类: 1. 单引号(&a…

京东数据采集接口推荐(京东大数据分析工具)

随着京东电商平台的不断发展,平台中店铺数量也越来越多,对于电商卖家而言,在电商运营过程中如何做好数据分析也越来越重要。而电商运营数据往往多而杂,想要高效的完成电商数据分析,品牌需要借助一些电商数据分析软件。…

给虚拟机配置静态id地址

1.令人头大的原因 当连接虚拟机的时候 地址不一会就改变,每次都要重新输入 2.配置虚拟机静态id地址 打开命令窗口执行 : vim /etc/sysconfig/network-scripts/ifcfg-ens33 按下面操作修改 查看自己子网掩码 3.重启网络 命令行输入 systemctl restart netwo…

物流公司打印用什么软件,佳易王物流运单打印管理系统软件下载

物流公司打印用什么软件,佳易王物流运单打印管理系统软件下载 软件特色: 1、功能实用,操作简单,不会电脑也会操作,软件免安装,已内置数据库。 2、物流开单打印,可以打印两联单或三联单&#x…

【深度学习】卷积神经网络结构组成与解释

卷积神经网络是以卷积层为主的深度网路结构,网络结构包括有卷积层、激活层、BN层、池化层、FC层、损失层等。卷积操作是对图像和滤波矩阵做内积(元素相乘再求和)的操作。 1. 卷积层 常见的卷积操作如下: 卷积操作解释图解标准卷…

Elasticsearch集群部署

组件介绍 1、Elasticsearch: 是基于一个Lucene的搜索引擎,提供搜索,分析。存储数据三大功能,他提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口,Elasticsearch是用Java开发的,…

【SpringBoot篇】阿里云OSS—存储文件的利器

文章目录 🌹什么是阿里云OSS⭐阿里云OSS的优点 🏳️‍🌈为什么要使用云服务OSS🎄使用步骤⭐OSS开通⭐参考官方SDK 🍔编写代码⭐上传文件 🌹综合案例 🌹什么是阿里云OSS 阿里云对象存储&#xf…