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

news2025/4/27 9:16:22

学习之路主要为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()

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智安网络|如何最大限度地提高企业网络安全水平

在当今数字化时代,企业面临着日益复杂和智能化的网络威胁。为了保护企业的机密信息和客户数据,漏洞扫描成为了一个至关重要的安全措施。然而,对于企业来说,他们最关心的是什么问题呢? 一、漏洞的发现和修复 在网络安全…

vscode的下载安装与配置【超详细】

1、下载 进入vscode官网 打开浏览器的下载内容管理,找到vscode下载任务,鼠标放在下载链接上并右击,点击复制链接地址 下载太慢?使用国内镜像 打开新窗口粘贴地址,并将域名改为:vscode.cdn.azure.cn&am…

【Spring集成MyBatis】MyBatis的多表查询

文章目录 1. 一对一什么是一对一User、Order类及Mapper,User、Order表一对一操作的实现一对一操作实现的第二种方式 2. 一对多什么是一对多一对多操作实现 3. 多对多什么是多对多多对多的实现 4. 小结 1. 一对一 什么是一对一 一对一指的是表与表之间通过外键进行…

002、ArkTS

之——开发语言 杂谈 基础编程语言ArkTS。引用来自华为开发者课堂。 ArkTS是HarmonyOS优选的主力应用开发语言。它在TypeScript(简称TS)的基础上,匹配ArkUI框架,扩展了声明式UI、状态管理等相应的能力,让开发者以更简洁…

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 潜在…

RabbitMQ之MQ的可靠性

文章目录 前言一、数据持久化交换机持久化队列持久化消息持久化 二、LazyQueue控制台配置Lazy模式代码配置Lazy模式更新已有队列为lazy模式 总结 前言 消息到达MQ以后,如果MQ不能及时保存,也会导致消息丢失,所以MQ的可靠性也非常重要。 一、…

Vatee万腾的科技探险:vatee数字化力量的前瞻征途

在Vatee万腾的科技探险中,我们领略到了一场数字化力量的前瞻征途,这是一次引领未来的创新之旅。Vatee万腾以其独特的科技理念和数字化力量,开启了一次引领行业的前瞻性征途,为数字化未来描绘出了崭新的篇章。 Vatee万腾的数字化力…

荆涛《春节回家》:歌声中的年味与乡愁

荆涛《春节回家》:歌声中的年味与乡愁春节,对于每一个中国人来说,都是一年中最为重要的时刻。它不仅仅是一个节日,更是团圆、乡愁、回忆与希望的象征。歌手荆涛的歌曲《春节回家》恰恰捕捉到了这些情感,用音乐为人们绘…

【AI认证笔记】NO.2人工智能的发展

目录 一、人工智能的发展里程碑 二、当前人工智能的发展特点 1.人工智能进入高速发展阶段 2.人工智能元年 三、人工智能高速发展的三大引擎 1.算法突破 2.算力飞跃 3.数据井喷 四、AI的机遇 五、AI人才的缺口 六、行业AI 人工智能算法,万物互联&#xff…

十大排序算法中的插入排序和希尔排序

文章目录 🐒个人主页🏅算法思维框架📖前言: 🎀插入排序 时间复杂度O(n^2)🎇1. 算法步骤思想🎇2.动画实现🎇 3.代码实现 🎀希尔排序 时间复杂度O(n*logn~n^2)希尔排序的设…

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

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

用Java写一个飞翔的小鸟

目录 在 App包创建以下类 GameApp类 main包 Barrier 类 Bird 类 Cloud 类 GameBackGround 类 GameBarrierLayer 类 GameFrame 类 GameTime 类 util包 Constant 类 GameUtil 类 游戏运行结果如下: 碰到柱子就结束游戏 在 App包创建以下类 GameApp类 p…

matlab使用plot画图坐标轴上的导数速度一点和加速度两点如何显示

一、背景 在使用matlab中的plot函数画图时,有时需要在坐标轴上显示一个点的导数项,如横坐标是时间,纵坐标是速度,也就是位置的导数 y ˙ \dot y y˙​,如下图所示,这在matlab如何操作呢? 二…

基于单片机的肺活量检测系统(论文+源码)

1.系统设计 在基于单片机的肺活量检测系统中,在硬件上整个系统通过利用主控制器STC89C52单片机来实现对整个系统进行控制的功能,通过采用LCD1602实现实时液晶显示数据的功能,通过肺活量传感器XGZP6847ADC0832实现监测肺活量的工作&#xff0…

【从浅识到熟知Linux】基本指令之date和cal

🎈归属专栏:从浅学到熟知Linux 🚗个人主页:Jammingpro 🐟每日一句:一篇又一篇,学写越上头。好像真的上头了~~ 文章前言:本文介绍date和cal指令用法并给出示例和截图。 文章目录 date…

医学检验科LIS系统源码 样本采集、检验、分析

LIS把检验、检疫、放免、细菌微生物及科研使用的各类分析仪器,通过计算机联网,实现各类仪器数据结果的实时自动接收、自动控制及综合分析;系统可与条码设备配套使用,自动生成条码,减少实验室信息传递中人为因素导致的误…

中通单号查询,中通快递物流查询,将途经指定城市的单号筛选出来

批量查询中通快递单号的物流信息,并将途经指定城市的单号筛选出来。 所需工具: 一个【快递批量查询高手】软件 中通快递单号若干 操作步骤: 步骤1:运行【快递批量查询高手】软件,第一次使用的朋友记得先注册&#x…

【LeetCode:1457. 二叉树中的伪回文路径 | 二叉树 + DFS +回文数】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

【unity实战】实现一个放置3d物品建造装修系统(附项目源码)

文章目录 最终效果前言绘制开始场景素材开始放置旋转物体扩展优化1. 绘制地图边界,确保放置物品在指定区域内工作2. 让模型所占面积大小更加准确3. 隐藏白色瓦片指示区域 最终效果其他源码参考完结 最终效果 前言 其实3d物品建造装修系统之前就已经做过了&#xff…

论文阅读——DDeP(cvpr2023)

分割标签耗时且贵,所以常常使用预训练提高分割模型标签有效性,反正就是,需要一个预训练分割模型。典型的分割模型encoder部分通过分类任务预训练,decoder部分参数随机初始化。作者认为这个方法次优,尤其标签比较少的情…