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

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.xdnf.cn/news/16720.html

相关文章:

  • 【STM32】HAL库中的实现(一)GPIO/SysTick/EXTI
  • Git之本地仓库管理
  • C语言---结构体(格式、用法、嵌套、初始化)、共用体、枚举类型、typedef类型
  • 常见的中间件漏洞(tomcat,weblogic,jboss,apache)
  • Spring Boot 项目问题:Web server failed to start. Port 5566 was already in use.
  • ESP32 外设驱动开发指南 (ESP-IDF框架)——GPIO篇:基础配置、外部中断与PWM(LEDC模块)应用
  • pdw估计edw怎么估计
  • VitePress 使用详解 -静态页面生成器
  • 解决SparkSQL创建出来的数据库hive中无法识别的问题
  • #Datawhale 组队学习#7月-强化学习Task6
  • C语言复习记录
  • OracleJDK和OpenJDK​区别,为什么Spring官方推荐使用OpenJDK?
  • 微服务 02
  • 2025虚幻5光明之魂开发思考1——借鉴软件工程
  • 初始sklearn 数据集获取、分类、划分与特征工程
  • 元素定位常见问题
  • Redis线程模型讨论
  • Flutter兼容的iOS的最低版本号
  • Java 大视界 -- Java 大数据在智能医疗远程健康监测与疾病预防预警中的应用(374)
  • 【IQA技术专题】DISTS代码讲解
  • Git 详细安装配置教程(Windows版)
  • 【每日一错】mysql账户及权限删除
  • 计数组合学7.9( 标量积)
  • vk框架或者普通函数封装的一些函数可以拿取使用【会持续更新】
  • [特殊字符] 数据可视化结合 three.js:让 3D 呈现更精准,3 个优化经验谈
  • 2025年物联网新趋势:格行随身WiFi的模块化架构与低延迟优化
  • 【09】大恒相机SDK C#开发 ——库函数 IntPtr ConvertToRGB24详细解释 及 示例
  • 【烧脑算法】Dijkstra 算法:解决最短路问题
  • Unity_数据持久化_PlayerPrefs存储各数据类型
  • 【爬虫实战】使用Python和JS逆向基于webpack的游戏平台