news 2026/4/23 12:31:01

【嵌入式】串口消息队列发送及重发

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【嵌入式】串口消息队列发送及重发

1. c文件

#defineDEF_MSG_QUEUE_MODULE/********************************************************************************* * INCLUDES *********************************************************************************/#include"msg_queue.h"#include<string.h>/********************************************************************************* * DEFINES *********************************************************************************//********************************************************************************* * MACROS *********************************************************************************//********************************************************************************* * TYPEDEFS *********************************************************************************/staticMsg_t msg_q[MSG_QUEUE_LEN];staticuint16_tmsgPackId=1;/********************************************************************************* * STATIC FUNCTION *********************************************************************************//********************************************************************************* * GLOBAL FUNCTION *********************************************************************************//*初始化*/voidinitMsg(void){//初始化变量memset(msg_q,0,sizeof(msg_q));msgPackId=1;//启动定时器}/*向消息队列中插入消息*/voidinsertMsg(uint8_t*msg,uint16_tlen,uint8_tqos){for(inti=0;i<MSG_QUEUE_LEN;i++){if(msg_q[i].isEnable){strncpy(msg_q[i].msg,msg,len);msg_q[i].isEnable=1;msg_q[i].msgLen=len;msg_q[i].packId=msgPackId;msg_q[i].sendCount=0;msg_q[i].timer=0;msg_q[i].qos=qos;msgPackId++;if(msgPackId>65530){msgPackId=1;}return;}}}/*从消息队列中移除消息, 收到回复则移除 */voidremoveMsg(uint8_tpackId){for(inti=0;i<MSG_QUEUE_LEN;i++){if(packId==msg_q[i].packId){msg_q[i].isEnable=0;}}}/*轮询处理, 在1s轮询或定时器中调用*/voidloopMsg(void){//计时for(inti=0;i<MSG_QUEUE_LEN;i++){if(msg_q[i].isEnable){msg_q[i].timer++;}}//重发消息for(inti=0;i<MSG_QUEUE_LEN;i++){if(msg_q[i].isEnable){if(msg_q[i].timer>3){uart_send(msg_q[i].msg,msg_q[i].msgLen);msg_q[i].timer=0;msg_q[i].sendCount++;}}}//移除重发次数超限的消息for(inti=0;i<MSG_QUEUE_LEN;i++){if(msg_q[i].isEnable){if(msg_q[i].sendCount>3){msg_q[i].isEnable=0;}}}}

2. h文件

#ifndef__MSG_QUEUE_H__#define__MSG_QUEUE_H__/********************************************************************************* * INCLUDES *********************************************************************************//********************************************************************************* * DEFINES *********************************************************************************/#ifdefDEF_MSG_QUEUE_MODULE#defineDEF_MSG_QUEUE_MODULE#else#defineDEF_MSG_QUEUE_MODULEextern#endiftypedefunsignedcharuint8_t;typedefunsignedshortuint16_t;typedefunsignedlonguint32_t;typedefsignedcharint8_t;typedefsignedshortint16_t;typedefsignedlongint32_t;/********************************************************************************* * MACROS *********************************************************************************/#defineMSG_QUEUE_LEN10/********************************************************************************* * TYPEDEFS *********************************************************************************/typedefstruct{uint8_tmsg[350];//消息实体uint16_tmsgLen;//消息实体的长度uint16_tpackId;//发送的包iduint8_tsendCount;//重复次数uint8_ttimer;//重发间隔时间uint8_tqos;//消息质量uint8_tisEnable;//是否有效}Msg_t;/********************************************************************************* * GLOBAL FUNCTION *********************************************************************************/voidinitMsg(void);voidinsertMsg(uint8_t*msg,uint16_tlen);voidremoveMsg(uint8_tpackId);voidloopMsg(void);#endif/* __MSG_QUEUE_H__ */
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 21:49:23

[特殊字符]Google神操作!Gemini 3发布前偷偷放5本AI Agent白皮书,小白程序员直接起飞!手把手教你从0到1构建智能体架构,2025年编程新风口不看血亏!

本文深度解析Google发布的5本Agent白皮书&#xff0c;详细阐述AI Agent的四大组成部分&#xff08;模型、工具、编排层、部署&#xff09;&#xff0c;从L0到L4的分级体系&#xff0c;以及构建Agent的完整流程。文章介绍了Agent的问题解决五步循环、核心架构设计、运维测试方法…

作者头像 李华
网站建设 2026/4/23 10:08:14

Redis为什么这么快?

大家好&#xff0c;我是锋哥。今天分享关于【Redis为什么这么快?】面试题。希望对大家有帮助&#xff1b; Redis为什么这么快? 超硬核AI学习资料&#xff0c;现在永久免费了&#xff01; Redis 是一个开源的内存数据存储系统&#xff0c;以其高性能和高效率而著称。其速度表…

作者头像 李华
网站建设 2026/4/16 7:42:56

Token到底是个啥?看完这篇终于懂了

很多人每天都在用一些 AI 工具&#xff0c;但是也经常听到 token。 那么 token 到底是什么&#xff1f;它有什么用&#xff1f; 今天我们不聊枯燥的概念&#xff0c;只用相对通俗易懂的方式帮助大家理解这个概念&#xff0c;并且提供工具&#xff0c;能够让大家上手体验。 Toke…

作者头像 李华
网站建设 2026/4/17 18:16:54

自建云服务器的潜在风险与安全挑战分析

自建云服务器的潜在风险与安全挑战分析自建云服务器在满足企业个性化需求的同时&#xff0c;也伴随着多维度的风险隐患&#xff0c;需要从技术架构、运维管理、安全防护等层面进行系统性考量。以下从八个核心维度剖析潜在风险&#xff1a;一、基础设施层风险硬件设备的物理安全…

作者头像 李华
网站建设 2026/4/21 9:41:54

我发现LLM实时解析康复动作视频,中风患者训练效率翻倍

&#x1f4dd; 博客主页&#xff1a;Jax的CSDN主页 目录当AI开始抢医生饭碗&#xff1a;一场医疗界的"诺亚方舟"实验 一、药丸还是药丸子&#xff1f;AI研发的混乱现场 二、电子病历里的AI"杠精" 三、当AI遇见急诊室&#xff1a;生死时速的"脑残"…

作者头像 李华