当前位置: 首页 > news >正文

freeRTOS 消息队列

队列是任务间通信的主要形式。 它们可以用于在任务之间以及中断和任务之间发送消息。

优先级继承:FreeRTOS 支持基于优先级的消息传递,确保高优先级任务在队列操作期间不会被低优先级任务阻塞,多个任务调用 xQueueReceive () 等待数据时,一旦队列有数据,最高优先级的等待任务会被优先唤醒

踩到的坑 

我在Task3传入了&name,类型为char **,但是我在task2中用于接收的QueReceive2,类型为char*,这里应该传入&QueReceive2。此时由于我传入的等待时间为portMAX_DELAY,队列内找不到,task2会一直进入阻塞态。

void Task2()
{char *QueReceive2;BaseType_t res;while(1){//只有freeRTOS提供的vTaskDelay()才会让任务进入阻塞态res = xQueueReceive(Que2_Handle, QueReceive2, (TickType_t)portMAX_DELAY);if(res == pdPASS){printf("task2:%s\n\r", QueReceive2);}else{printf("task2:false\r\n");}vTaskDelay(500);}
}
void Task3()
{char *name = "cuijinyu";while(1){uint8_t keynum;keynum = Key_Detect();//判断Task1是否已经被删除if(keynum == KEY1_PRESS||keynum == KEY2_PRESS){xQueueSend(Que1_Handle, &keynum, (TickType_t) portMAX_DELAY);printf(" %d down\r\n", keynum);}else if(keynum == KEY3_PRESS){xQueueSend(Que2_Handle, &name, (TickType_t) portMAX_DELAY); }vTaskDelay(50);}
}

http://www.dtcms.com/a/308020.html

相关文章:

  • Cesium 快速入门(三)Viewer:三维场景的“外壳”
  • 【MySQL】MySQL大偏移量查询优化方案
  • 若依框架-前端二次开发快速入门简述
  • [硬件电路-109]:模拟电路 - 自激振荡器的原理,一种把直流能量转换成交流信号的装置!
  • Linux软件包管理器深度解析:从概念到实战
  • React开发依赖分析
  • TRAE 软件使用攻略
  • 快速搭建Node.js服务指南
  • python制作的软件工具安装包
  • c# net6.0+ 安装中文智能提示
  • 前端框架Vue3(二)——Vue3核心语法之OptionsAPI与CompositionAPI与setup
  • 超体积指标(Hypervolume Indicator,S 度量)详析
  • 【JMeter】性能测试脚本录制及完善
  • 辐射源定位方法简述
  • 【BUUCTF系列】[HCTF 2018]WarmUp1
  • 网络编程-IP
  • 计算机网络:什么是光猫
  • Hyperbrowser MCP:重新定义网页抓取与浏览器自动化的AI驱动工具
  • Solr升级9.8.0启动异常UnsupportedOperationException known Lucene classes
  • Tauri vs Electron 的全面对比
  • 生产管理升级:盘古IMS MES解锁全链路可控可溯,激活制造效率
  • LCM中间件入门(2):LCM核心实现原理解析
  • 牛客练习赛142 第四次忍界大战 并查集
  • 永磁同步电机无速度算法--直流误差抑制自适应二阶反推观测器
  • Gemini Fullstack LangGraph Quickstart(DeepSeek+Tavily版本)
  • 【React】diff 算法
  • Elasticsearch 索引及节点级别增删改查技术
  • 基于单片机胎压检测/锅炉蒸汽压力/气压检测系统
  • VBA代码解决方案第二十七讲:禁用EXCEL工作簿右上角的关闭按钮
  • 分布式ID方案(标记)