news 2026/8/21 20:30:05

[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/8/21 17:05:10

Linly-Talker安全性评估:数据隐私与模型合规性说明

Linly-Talker安全性评估:数据隐私与模型合规性说明 在企业数字化转型加速的今天,虚拟数字人正从科幻概念走入银行客服、在线教育和远程医疗等真实场景。一个能说会动的AI形象背后,往往涉及人脸图像、语音样本和对话内容等多种敏感信息的处理。…

作者头像 李华
网站建设 2026/8/22 1:36:37

智能家居控制系统Java实现

这是一个基于Java面向对象编程的智能家居控制系统,通过多态、继承和接口等设计模式,模拟了家庭中各类电器的开关控制功能。系统架构设计1. 核心类结构1.1 抽象层设计Switch接口 - 定义了设备的基本操作规范package demo;public interface Switch {void p…

作者头像 李华
网站建设 2026/8/21 10:52:54

MySQL主从延迟飙升?元数据锁可能是“真凶”

现象:IO线程欢快,SQL线程却在划水 看到从库的SecondsBehindMaster从30秒直线飙升到1000秒,你是不是冷汗直冒? IO线程还在欢快地读取日志,SQL线程却像被冻住了一样,一步一步往后挪,而且越来越慢。 这真的不是网络问题,而是你的DDL操作在暗地里搞破坏。 我见过太多线上…

作者头像 李华
网站建设 2026/8/21 19:11:22

centos打开文件之后怎么退出 ,使用linux命令

在 CentOS 终端中打开文件后,退出方法取决于你使用的编辑器。以下是常见编辑器的退出命令:1. ‌Vim/Vi 编辑器‌ 保存并退出‌:按 Esc 键,输入 :wq,然后按 Enter。 不保存退出‌:按 Esc 键,输入…

作者头像 李华
网站建设 2026/8/21 23:41:36

通信系统仿真:无线通信系统仿真_(20).案例分析:卫星通信系统仿真

案例分析:卫星通信系统仿真 卫星通信系统概述 卫星通信系统是一种利用人造卫星作为中继站,实现地面站之间或地面站与移动站之间的通信系统。卫星通信系统具有覆盖范围广、传输距离远、通信质量稳定等优点,广泛应用于远程通信、广播、导航等领…

作者头像 李华
网站建设 2026/8/22 1:54:27

Linly-Talker与HeyGen对比:谁更适合中文数字人场景?

Linly-Talker与HeyGen对比:谁更适合中文数字人场景? 在企业数字化转型加速的今天,越来越多机构开始用“数字人”替代传统视频制作——不是为了炫技,而是为了解决内容更新慢、人力成本高、互动性差这些实实在在的问题。尤其是面对…

作者头像 李华