报文结构化定义

    通信协议的报文解析过程可通过标准化封装实现高效统一的处理体系,其核心在于抽象共性规律并建立可配置的解析框架。

一、报文格式共性规律分析

二、通用解析框架设计原则

三、核心模块实现方案

/**
 * @file    mx_frame_parser.h
 * @brief   通用数据帧解析器配置结构定义
 * @note    支持可变帧头、长度字段位置和大端/小端处理
 */

#define HEAD_MAXLEN 10  ///< 帧头最大支持长度

/**
 * @brief   帧头比较函数指针类型
 * @param   buff    待比较缓冲区指针
 * @param   Data    预期数据指针
 * @param   DataSize 比较数据长度
 * @return  匹配结果:0-不匹配,1-匹配
 */
typedef uint8_t(*mx_framehead_memcmp)(uint8_t* buff, uint8_t* Data, uint8_t DataSize);

/**
 * @brief  长度字段字节占用配置
 * @note   根据协议规范选择长度字段占用的字节数[1](@ref)
 */
typedef enum {
    FRAMELEN_OCCUPANCY_1BYTE = 0,  ///< 长度字段占1字节 (0~255)
    FRAMELEN_OCCUPANCY_2BYTE = 1,  ///< 长度字段占2字节 (0~65535) 
    FRAMELEN_OCCUPANCY_3BYTE = 2,  ///< 长度字段占3字节 (0~16777215)
    FRAMELEN_OCCUPANCY_4BYTE = 3,  ///< 长度字段占4字节 (0~4294967295)
} framelen_occupancy;

/**
 * @brief  长度字段字节序配置
 * @note   根据协议规范选择大端或小端格式[3](@ref)
 */
typedef enum {
    FRAMELEN_LITTLE_ENDIAN = 0,  ///< 小端模式(低位在前)
    FRAMELEN_BIG_ENDIAN    = 1,  ///< 大端模式(高位在前)
} framelen_endian;

/**
 * @brief  帧解析器配置结构体
 * @note   支持自定义帧格式:帧头(N byte) + 长度字段(1-4 byte) + 数据载荷
 */
typedef struct {
    /* 帧头配置 */
    uint8_t  framehead_code[HEAD_MAXLEN];  ///< 帧头特征码数组
    uint8_t  framehead_len;                 ///< 有效帧头字节数
    uint8_t  framehead_mem;                 ///< 实际参与比较的字节数(用于模糊匹配)
    int8_t   framehead_left;                ///< 帧头左侧保留字节数(用于变长帧头)
    
    /* 解析状态 */
    uint8_t  chk_step;          ///< 当前解析阶段(0-寻找帧头,1-解析长度,2-获取载荷)
    uint16_t loaded_length;     ///< 已加载数据长度
    uint16_t remainder_length;  ///< 剩余待接收数据长度
    
    /* 功能回调 */
    mx_framehead_memcmp framehead_memcmp;  ///< 自定义帧头比较函数指针
    
    /* 长度字段配置 */
    framelen_occupancy occupancy_byte;  ///< 长度字段字节数配置
    framelen_endian    endian_type;      ///< 长度字段字节序配置
    uint8_t  framelen_position;         ///< 长度字段相对帧头的偏移量(字节)
    uint8_t  memcmp_time;               ///< 帧头最大匹配尝试次数(防粘包处理)
} mx_frame_parser_config;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值