news 2026/8/1 6:58:10

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

作者头像

张小明

前端开发工程师

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/7/30 22:13:33

0基础小白转行学习网络安全,按照这个路线就可以啦!

随着国家和社会对网络安全的重视&#xff0c;越来越多的人已经意识到网络安全在未来大有可为&#xff0c;于是想要学习网络安全的人也越来越多。 但是很多人虽然有学习的想法&#xff0c;却没有学习的方向&#xff0c;就像无头苍蝇一样&#xff0c;不停碰壁也浪费了很多时间。为…

作者头像 李华
网站建设 2026/7/30 12:37:03

Wyn商业智能软件:新一代智能商业决策工具的嵌入式AI分析实践

深度解析葡萄城Wyn商业智能软件如何融合AI大模型与嵌入式BI技术&#xff0c;打造智能商业决策工具。涵盖技术架构、核心功能、行业应用案例及2025年选型指南&#xff0c;助企业构建"人人可分析"的数据驱动型组织。一、引言&#xff1a;智能商业决策工具的时代拐点 在…

作者头像 李华
网站建设 2026/7/28 6:29:19

微服务架构治理新范式:AI驱动的依赖关系智能解析与优化

在微服务架构日益普及的今天&#xff0c;依赖关系管理已成为制约系统稳定性和开发效率的关键因素。行业数据显示&#xff0c;超过75%的微服务项目在运行两年后会出现严重的依赖混乱问题&#xff0c;导致系统可维护性急剧下降。随着服务规模扩大&#xff0c;传统的依赖管理方式已…

作者头像 李华