C语言和设计模式(3.2命令模式)

本文探讨了如何使用C语言的命令模式来处理串口协议,通过维护命令列表,避免了复杂的解析函数,使代码更简洁、易扩展。这种方式同样适用于网口和其他类型的协议,如CAN协议,通过将协议ID映射为命令,实现了灵活的协议处理。
摘要由CSDN通过智能技术生成

       在命令模式里面,我们只需要维护一个命令列表就行了,而不需要关注解析函数本身。

// 当心字节对齐的问题
typedef struct {
    uint8_t head;
    uint8_t cmd;
    uint16_t length;
    uint8_t data[1];
} package_t;

static void parse_temperature( uint8_t *buffer )
{
    int value = *buffer;
    printf( "temperature = %d\n", value );
}
static void parse_humidity( uint8_t *buffer )
{
    int value = *buffer;
    printf( "humidity = %d\n", value );
}
static void parse_illumination( uint8_t *buffer )
{
    int value = *buffer;
    printf( "illumination = %d\n", value );
}

typedef struct {
    uint8_t cmd;
    void ( * handle )( uint8_t *buffer );
} package_entry_t;

static const package_entry_t package_items[] = {
    {0x01, parse_temperature},
    {0x02, parse_humidity},
    {0x03, parse_illumination},
    {0xFF, NULL},
};

static uint8_t parse( uint8_t *buffer
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值