社区首页
技术讨论创新帖
全部新帖
资料区
社区活动
联系管理员
★ 社区积分制度
★ 新手必读
★ 申请版主★
首页
|
电子技术
|
嵌入式
模拟电子
单片机
电源管理
传感器
半导体
电子应用
|
工业控制
物联网
汽车电子
网络通信
医疗电子
手机便携
测试测量
安防电子
家用电子
机器人
新能源
电子头条
|
社区
|
论坛
测评
博客
大学堂
|
下载
|
下载中心
电路图
精品文集
电路图
|
参考设计
|
Datasheet
|
活动
|
直播
datasheet
datasheet
文章
搜索
登录
注册
中文
En
论坛
切换旧版
电子工程世界-论坛
»
论坛
›
电子技术交流
›
单片机
›
NXP MCU
›
【MCXA156开发板测评】学习笔记07(reeRTOS中的消息队列 ...
返回列表
发新帖
回复
阅
278
|
回
0
qzc0927
当前离线
一粒金砂(高级)
最后登录
2025-3-15
在线时间
44 小时
威望
399分
芯积分
341分
(兑换)
E金币
50枚
(兑换)
(兑换)
好友
1
qzc0927
168
帖子
0
TA的资源
一粒金砂(高级)
+ 好友
私信
发表于2025-2-17 09:25
显示全部楼层
【MCXA156开发板测评】学习笔记07(reeRTOS中的消息队列使用)
[复制链接]
# FreeRTOS 消息队列概述 FreeRTOS 消息队列是核心的进程间通信机制,允许任务以 FIFO(先进先出)的方式发送和接收数据。通过 `xQueueSend` 和 `xQueueReceive` 函数,任务之间可以传递数据,并且可以选择阻塞或非阻塞操作。该示例中使用消息队列来存储日志数据,日志任务从队列中读取这些数据并显示。 # 硬件设计 ## 硬件要求: - **Type-C USB 数据线** - **FRDM-MCXA156 开发板** - **个人计算机** ## 板卡设置: 不需要特殊配置,只需要确保开发板通过 USB Type-C 数据线正确连接到计算机,并且程序已经成功下载到目标板上。 ## 通信接口: 使用串口终端(例如 Tera Term)查看目标板的调试输出。串口终端配置应如下: - **波特率**:115200 - **数据位**:8 - **校验位**:无 - **停止位**:1 - **流控制**:无 # 软件设计 ## 代码结构 代码分为两个主要部分:日志机制和应用程序任务。 ## 日志机制 日志功能负责使用队列管理日志消息。它创建一个消息队列并创建一个任务来打印这些消息。 ## 日志 API 函数: 1. **`log_add`**:将日志消息添加到队列中。 ```C c复制编辑// 向日志队列中添加一条日志消息 void log_add(char *log) { xQueueSend(log_queue, log, 0);// 向队列发送日志消息 } ``` 2. **`log_init`**:初始化日志系统,创建消息队列并创建日志任务。 ```C c复制编辑// 初始化日志系统,创建队列和日志任务 void log_init(uint32_t queue_length, uint32_t max_log_length) { log_queue = xQueueCreate(queue_length, max_log_length);// 创建消息队列 if (log_queue != NULL) { vQueueAddToRegistry(log_queue, "LogQ");// 注册队列 } // 创建日志任务 if (xTaskCreate(log_task, "log_task", configMINIMAL_STACK_SIZE + 166, NULL, tskIDLE_PRIORITY + 1, NULL) != pdPASS) { PRINTF("任务创建失败!.\r\n"); while (1);// 如果任务创建失败,进入死循环 } } ``` 3. **`log_task`**:任务不断地从队列中接收日志消息并打印。 ```C c复制编辑// 日志任务,从队列中接收并打印日志 static void log_task(void *pvParameters) { uint32_t counter = 0;// 日志计数器 char log[MAX_LOG_LENGTH + 1]; while (1) { if (xQueueReceive(log_queue, log, portMAX_DELAY) != pdTRUE) { PRINTF("接收队列失败。\r\n"); } PRINTF("Log %d: %s\r\n", counter, log);// 打印日志 counter++; } } ``` ## 应用程序任务 有两个任务:`write_task_1` 和 `write_task_2`,它们模拟生成日志消息,并将其发送到日志任务进行打印。每个任务生成 5 条消息。 ### 任务代码: ```C c复制编辑// 任务1,发送5条日志消息 static void write_task_1(void *pvParameters) { char log[MAX_LOG_LENGTH + 1]; uint32_t i = 0; for (i = 0; i < 5; i++) { sprintf(log, "Task1 Message %d", (int)i);// 格式化日志消息 log_add(log);// 将消息添加到日志队列 taskYIELD();// 任务让出控制权 } vTaskSuspend(NULL);// 挂起任务 } // 任务2,发送5条日志消息 static void write_task_2(void *pvParameters) { char log[MAX_LOG_LENGTH + 1]; uint32_t i = 0; for (i = 0; i < 5; i++) { sprintf(log, "Task2 Message %d", (int)i);// 格式化日志消息 log_add(log);// 将消息添加到日志队列 taskYIELD();// 任务让出控制权 } vTaskSuspend(NULL);// 挂起任务 } ``` ### 主函数 在 `main` 函数中,初始化了日志系统,并创建了两个任务 `write_task_1` 和 `write_task_2`。 ```C c复制编辑// 主函数 int main(void) { BOARD_InitPins();// 初始化引脚 BOARD_InitBootClocks();// 初始化时钟 BOARD_InitDebugConsole();// 初始化调试控制台 // 初始化日志系统,队列长度为10,每条日志最大长度为20字节 log_init(10, MAX_LOG_LENGTH); // 创建任务1 if (xTaskCreate(write_task_1, "WRITE_TASK_1", configMINIMAL_STACK_SIZE + 166, NULL, tskIDLE_PRIORITY + 2, NULL) != pdPASS) { PRINTF("任务创建失败!.\r\n"); while (1);// 如果任务创建失败,进入死循环 } // 创建任务2 if (xTaskCreate(write_task_2, "WRITE_TASK_2", configMINIMAL_STACK_SIZE + 166, NULL, tskIDLE_PRIORITY + 2, NULL) != pdPASS) { PRINTF("任务创建失败!.\r\n"); while (1);// 如果任务创建失败,进入死循环 } vTaskStartScheduler();// 启动调度器 for (;;);// 进入空循环 } ``` # 实验结果 程序烧录到开发板后,通过串口终端可以看到以下日志输出,显示 `write_task_1` 和 `write_task_2` 两个任务并发执行,并向日志任务发送消息,串口结果输出:  # 结论 通过本示例,展示了如何在 FreeRTOS 中使用消息队列实现简单的日志机制。任务通过消息队列将日志消息传递给日志任务,日志任务负责打印这些消息。该示例展示了消息传递和任务同步的基本概念,并能有效地展示多个任务如何在 FreeRTOS 中协作。
此帖出自
NXP MCU论坛
回复
分享
扫一扫,分享给好友
复制链接分享
链接复制成功,分享给好友
举报
提升卡
变色卡
千斤顶
返回列表
发新帖
回复
您需要登录后才可以回帖
登录
|
注册
发表回复
回帖后跳转到最后一页
活动
更多>>
PI 有奖直播|电机开发很复杂?MotorXpert™助您事半功倍!
2025 英飞凌消费、计算与通讯创新大会(北京站)重磅来袭!
中星联华&ADI直播:大咖面对面,轻松玩转高速 ADC 性能测试
立即报名 | 2025 瑞萨电子工业以太网技术日 即将开启!(3月12日-4月18日)
ADI有奖直播:易于驱动SAR型ADC的原理、优点及应用介绍
DigiKey 应用探索站 | 电源解决方案和技术
有奖直播 | 2025是德科技数字月-数字新品来助阵
嵌入式Rust修炼营:动手写串口烧录工具和MCU例程,Rust达人Hunter直播带你入门Rust
开源项目
更多>>
使用 Analog Devices 的 LT1767EMS8-2.5 的参考设计
KSZ8775CLX-EVAL,用于 KSZ8775CLX 以太网交换机的评估板,用于以太网 LAN 和 WAN 接口
(已验证) LoRaUNO开发板 lora
LTC3858-1 的典型应用 - 低 IQ、双路 2 相同步降压型控制器
51stc15WS104控制ULN2003A 步进电机
TWR-MCF51MM-KIT,用于 MCF51MM256 Flexis ColdFire 32 位微控制器的医疗开发塔式系统模块,适用于便携式医疗应用
LT6656ACDC-3.3、3.3V ADC 电压基准和桥式励磁电源的典型应用
DER-113 - 5W、5V充电器
用于电机控制的 45W、30V 交流转直流单输出电源
LTC3722-1 演示板,36-72V 输入和 12V,35A 输出
随便看看
【MCXA156开发板测评】学习笔记06(reeRTOS中的互斥锁使用)
在嵌入式系统中,多个任务可能需要访问共享资源,例如终端输出。如果没有合适的同步机制,多个任务同时输出数据时,可能会出现输出内容交织混乱,影响系统的稳定性和可靠性。为了解决这一问题,我们可以使用FreeRTOS提供的互斥锁(mutex)来同步任务的访问, ...
【MCXA156开发板测评】学习笔记05(FreeRTOS的信号量使用)
[i=s]本帖最后由qzc0927于2025-2-1211:28编辑[/i]概述在嵌入式开发中,生产者消费者模式常用于解决并发任务之间的同步问题。本文将介绍如何在NXPMCXA156开发板上使用FreeRTOS实现生产者消费者模式。通过该模式,生产者任务会生成数据,并将其交给消费者任务进 ...
GDF470单片机使用STM32的HAL库实现页擦除操作,如何实现?
目前有个项目使用的是GDF470单片机,本身支持页擦除操作。但使用的是STM32的HAL库,ST的F4的不支持页擦除操作,有没有办法在不改变库的情况下,实现页擦除操作
电子设备电磁兼容性(EMC)测试与系统化整改
【AG32VH407开发板】硬件i2c方式驱动oled显示屏
应用技巧/基于P89C51RD2 IAP功能的数据存取与软件升级
一世不长,只求活得漂亮
单片机5V输出怎么样去驱动一个24V的电磁阀?
关于include的路径
RLC模拟电路设计
查找数据手册?
搜索
EEWorld Datasheet 技术支持
热门标签
源代码
单片机
放大器
TI
ST
电源
分立器件
传感器
测试测量
模拟
离散傅里叶变换
接地电阻测量仪
红外双鉴探测器
满负载转矩
电子陀螺仪
阻容吸收器
图像分割
机器人
电阻焊
VPDN
相关文章
更多>>
中国首个、自主研发,汽车座舱热舒适性测评系统设备发布
据央视新闻报道,由国家机动车质检中心(浙江)设计的“汽车座舱热舒适性测评系统设备”被认定为国内首台(套)装备。 该设备是国内首个自主研发、专为中国人群及汽车动态座舱环境量身打造的人体热舒适性测试评估
恩智浦发布全球首款 16nm FinFET MRAM 车规级 MCU
3 月 14 日消息,恩智浦半导体公司本周二发布了全新的 S32K5 系列汽车微控制器(MCU),采用 Arm Cortex M7+R52+M4 多核设计,最高 800MHz,同时配备了 41MB
首批iPhone 16e出现翻车故障:蓝牙音频卡顿
3月14日消息,在社交平台上,首批iPhone 16e用户遭遇了蓝牙音频故障问题。 一位用户发帖表示,他从iPhone 13 mini升级到了iPhone 16e,当手机连接蓝牙设备后,声音就会出现
美国 FTC 正推进对微软的大规模反垄断调查,目前已进入实质性证据收集阶段
三星电子系统 LSI 部门接近完成重组,内部考虑将“Exynos”转移至 MX 部门
官宣!陈立武成为英特尔有史以来首位华人CEO
深度剖析汽车智能座舱芯片:舱驾融合大战背后的逻辑
保时捷将裁员数千人,电池研发、架构调整等进一步增加成本压力
欧洲电池“希望之星”陨落:Northvolt 在瑞典申请破产
今年嵌入式展,MCU开启神仙打架
新帖速递
STM32和无源蜂鸣器播放声音的问题
车规级AECQ200介绍,混合铝电解电容器的选择
嵌入式教程_DSP技术_DSP实验箱操作教程:2-28 搭建轻量级WEB服务器实验
OPA847IDBVR运放器国产替代
AG32VF407测试UART
【得捷电子Follow Me第二期】第一章 收到货物的分享
请问这个红外接收头是什么型号?能用哪个型号代替?谢谢
出售全新未拆封ZYNQ 7Z020 FPGA核心板
用在锂电池供电的水表设置上的LORA模块,当有100块水表集中安装在一个楼道内时,节能
请问一下,当某个端口被设置为 RX0后,这个端口的输入输出方向还有必要设置吗
今年怎么这么难,比疫情时还难,三十了面临失业好迷茫
请教稳压管测试问题
【小华HC32F448测评】关于小华半导体的UART中断发送和PRINTF构造和重定向
【BIGTREETECH PI开发板】 HDMI输出测试
【BIGTREETECH PI开发板】+08.音频测试(zmj)
报名最后一周!2025 英飞凌消费、计算与通讯创新大会-北京站
会议时间:3月18日(周二)09:30签到
参会奖励:电动螺丝刀套装、户外登山包、京东卡
查看 »
TI 处理器AM62L深度讲解,报名直播赢【双肩包、充电器、胶囊伞】
【直播要点】• 如何实现安全节能设计;• 开箱体验和demo;• 软件和硬件
【直播时间】3月21日(周五)上午10:00
查看 »
立即报名 | 2025 瑞萨电子工业以太网技术日即将开启!
3月-4月 深圳、广州、北京、苏州、西安、上海 走进全国6城
2025瑞萨电子工业以太网技术巡回沙龙聚焦工业4.0核心需求,为工程师与企业决策者提供实时通信技术最佳解决方案。
预报从速,好礼等您拿~
查看 »
ADI 探索季,邀您在活动帖跟帖,ADI资深工程师将与您一道寻求解决之道!
春晚,最出圈当属穿着棉马甲跳秧歌的机器人”秧Bot”。
转手绢、飞手绢、变换队形,精准度和稳定性甚至超越人类,这背后少不了电机控制技术。
查看 »
【有奖直播】2025是德科技数字月-数字新品来助阵
直播时间:3月19日(周三)14:00
直播奖励:小米口红充电宝、倍思充电线、是德科技十周年鼠标垫
查看 »
ADI 中国30周年,与你一起走过的那些精彩瞬间!
即日起-4月30日,阅读资料,您可以参与ADI真爱粉大考验,同时为ADI中国30周年送上祝福!我们将从参与者中随机抽取精美礼品送出!
查看 »
有奖活动 | PI PowiGaN技术学习中心,全方位解读PI 1700V GaN: InnoMux-2 EP技术精髓 ...
活动时间:即日起-2025年3月23日
1、进入 PI PowiGaN技术学习中心,点击任意视频 ,填写并提交表单即可观看(只需提交1次表单);
2、活动结束后,将随机抽取30名幸运者派送50元京东卡!
查看 »
电源解决方案和技术 | DigiKey 应用探索站
当月好物、电源技术资源、特色活动、DigiKey在线实用工具,干货多多~
查看 »
Microchip 直播|利用motorBench开发套件高效开发电机磁场定向控制方案 报名中!
直播主题:利用motorBench开发套件高效开发电机磁场定向控制方案
直播时间:2025年3月25日(星期二)上午10:30-11:30
快来报名!
查看 »
有奖直播:ADI 超低功耗 MCU MAX326xx 系列介绍
直播时间:3月20日(周四) 上午10:00
活动奖励:双肩包、充电宝、小夜灯
查看 »
关闭
站长推荐
1
/10
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
电信业务审批[2006]字第258号函
京公网安备 11010802033920号
Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复
返回顶部
返回列表
论坛首页
版块列表
专业技术中心
TI技术论坛
DigiKey得捷技术专区
ST传感器与低功耗无线技术论坛
ADI工业技术论坛
电子技术交流
边缘AI
嵌入式系统
单片机
国产芯片交流
电机控制
FPGA/CPLD
模拟电子
电源技术
无线连接
传感器
PCB设计
综合技术交流
下载中心专版
大学堂专版
测评中心专版
行业应用
汽车电子
机器人开发
工业自动化与控制
能源基础设施
医疗电子
消费电子
创意与实践
电子竞赛
DIY/开源硬件专区
淘e淘
创意市集
休息一下
聊聊、笑笑、闹闹
工作这点儿事
为我们提意见&公告
EEWorld颁奖专区
信息发布
最新帖子
最新帖子
最新回复
精华
消灭零回复
测评中心
活动中心
积分兑换
E金币兑换
芯积分
厂商专区
TI技术论坛
DigiKey得捷技术专区
ST传感器与低功耗无线技术论坛
ADI工业技术论坛