news 2026/5/16 12:34:57

[free rtos 队列的讲解(第三天)]

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[free rtos 队列的讲解(第三天)]

队列单的说 他就是传递信息的作用

队列项目: 队列中的每个数据单元(如示意图中的每个圆圈)

队列长度: 队列能存储的最大项目数量(如最多存放5个数据)

  • FIFO(先进先出): 默认方式,先入队的数据优先被读取(如流水线依次处理)
  • LIFO(后进先出): 可配置但较少使用
  • 需记忆"First In First Out"专业术语
2)数据传递方式
  • 值传递: 默认将数据拷贝到队列中(如兔子产生的数据完整复制到队列)
  • 指针传递: 传递较大数据时为节省时间可采用指针传递
3)多任务访问
  • 共享性: 队列不属于特定任务,任何任务/中断都可发送/读取消息
  • 互斥保护: 自动实现入队出队操作的互斥访问
4)阻塞机制
  • 阻塞时间设置:
    • 0: 不等待,立即返回
    • 0_portMAX_DELAY 等待指定时间后超时返回

    • portMAX_DELAY 死等直到操作成功

下面我们分析队列相关API函数

QueueHandle_t xQueueCreate( UBaseType_t uxQueueLength, UBaseType_t uxItemSize );
  • 参数说明:
    • uxQueueLength: 队列最大容量(如5个数据)
    • uxItemSize: 每个数据项的字节大小
  • 返回值: 成功返回队列句柄,失败返回NULL
  • 下面我们进行写队列

  • ​ BaseType_t xQueueSend( QueueHandle_t xQueue, const void* pVItemToQueue, TickType_t xTicksToWait ) ​
  • BaseType_t xQueueReceive(QueueHandle_t xQueue, void *pvBuffer, TickType_t xTicksToWait);

    这是我们读队列

  • ​ xQueue:待读取的队列句柄 pvBuffer:数据读取缓冲区指针(存放读出数据) xTicksToWait:阻塞超时时间(单位:系统时钟节拍) ​

    下面我们开始进行实际操作

  • 我们的任务是按下key1 向队列发数据 按下key2 向队列接收数据

我们创建任务 下面我们创建队列

其中16是我们的队列是 长度 uint16_t 8位 为一个字节

所以是两个字节

下面我放进去源代码

void StartTaskReceive(void const * argument) { /* USER CODE BEGIN StartTaskReceive */ uint16_t buf; BaseType_t status; /* Infinite loop */ for(;;) { if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) == GPIO_PIN_RESET) { osDelay(20); if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) == GPIO_PIN_RESET) { status = xQueueReceive(myQueueHandle, &buf, 0); if (status == pdTRUE) { printf("读取队列成功,读出值%d\r\n", buf); } else { printf("读取队列失败\r\n"); } } while (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) == GPIO_PIN_RESET); } osDelay(10); } /* USER CODE END StartTaskReceive */ }

后面我会更新 二值信号量

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 3:08:50

Linly-Talker如何实现低延迟实时对话?架构深度剖析

Linly-Talker如何实现低延迟实时对话?架构深度剖析 在虚拟主播24小时不间断直播、智能客服秒级响应、在线教育中师生自然互动的今天,用户早已不再满足于“能动”的数字人——他们要的是“像人一样思考、说话和表达”的交互体验。然而,大多数…

作者头像 李华
网站建设 2026/5/15 15:31:22

Xshell SSH 连接故障排查

Xshell SSH 连接故障排查详解 本文整理了 Xshell SSH 典型故障排查指南,涵盖连接超时、连接被拒绝、密码和密钥认证失败、算法兼容性等常见问题,并提供详细排查步骤和解决方法。1. SSH 连接超时(Connection Timed Out) 1.1 常见原…

作者头像 李华
网站建设 2026/5/15 18:14:01

行星齿轮非线性程序:相图、庞加莱与分叉图

行星齿轮非线性程序,能出相图,庞加莱,分叉图。行星齿轮系统这玩意儿搞动力学分析,满屏都是非线性项。刚接触那会儿看着微分方程头皮发麻,后来发现直接数值求解才是真香。咱今天就拿Python撸个能出相图、庞加莱截面和分…

作者头像 李华
网站建设 2026/5/6 10:47:54

伪代码示意

利用CST对三维超材料的能带计算程序刚接触超材料能带计算那会儿,被三维结构搞得头皮发麻。传统平面结构的Floquet模式分析套路在立方体、金字塔这些立体结构面前直接失效。摸索了两个月,终于搞定了CST里三维能带计算的完整流程,这里把踩过的坑…

作者头像 李华
网站建设 2026/5/9 18:07:08

Comsol周期性超表面多极子分解仿真:模型、公式与图解教程

Comsol周期性超表面多极子分解仿真 (注意区分与单个散射体的区别,单个散射体多极子分解见主页其他案例) 附赠一键使用教学。 包含三个模型,包含公式总结、Comsol程序以及matlab绘图。 包含matlab作图和comsol直接出图两种版本。周期性超表面多极子分解&a…

作者头像 李华
网站建设 2026/5/15 16:59:30

玩COMSOL的老司机都知道,表面增强拉曼散射(SERS)的核心戏法全在局域电场增强上。今天咱们不整虚的,直接上干货聊聊怎么用波动光学模块调教纳米结构

COMSOL表面增强拉曼散射。 概述:通过仿真表面增强基底的局域表面电场分布,研究衬底材料、基底形貌和尺寸等对表面增强基底局域电场强度的影响,为后续制备高增强效果的表面增强基底提供理论指导。 建模:设置表面增强基底的形貌和尺寸&#xff…

作者头像 李华