0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

采用回调函数的方式优化嵌入式系统命令解析

玩转单片机与嵌入式 来源:玩转单片机与嵌入式 2023-11-14 09:19 次阅读

嵌入式系统开发中,命令解析是一个关键的环节,它负责解析用户或其他系统发送的命令,并执行相应的操作。传统的命令解析方法通常采用switch case语句,这种方式虽然经典,但在功能扩展和代码维护上存在一些不足。下面小编为大家推荐一种更为灵活和模块化的命令解析方法,即通过回调函数实现功能码的动态绑定,提高系统的可维护性和可扩展性。

传统方法的缺陷

在传统的命令解析中,如下图所示的协议内容:

83c05b58-828b-11ee-939d-92fbcf53809c.png

为了解析协议中的命令码,我们经常看到类似于下面的switch case语句:

void poll_task(rt_uint8_t cmd, rt_uint8_t *msg, uint8_t len){
    switch (cmd){
    case cmd1:
        func1();
        break;
    case cmd2:
        func2();
        break;
    case cmd3:
        func3();
        break;
    case cmd4:
        func4();
        break;
    default:
        default_func();
        break;  
    }
}

这样的写法存在一个明显的问题,即在增加新的功能码时需要修改poll_task函数,不够灵活。而且,若要统计功能码的个数,只能手动数,不够智能


创新的回调函数应用

为了解决传统方法的问题,我们可以使用回调函数和功能码绑定的方式,使代码更为模块化和清晰。具体实现如下:

typedef struct
{
    rt_uint8_t CMD;
    rt_uint8_t (*callback_func)(rt_uint8_t cmd, rt_uint8_t *msg, uint8_t len);
} _FUNCCALLBACK;


_FUNCCALLBACK callback_list[] =
{
    {cmd1, func_callback1},
    {cmd2, func_callback2},
    {cmd3, func_callback3},
    {cmd4, func_callback4},
    // 添加新的功能码和回调函数只需在这里新增
};


void poll_task(rt_uint8_t cmd, rt_uint8_t *msg, uint8_t len){
    int cmd_indexmax = sizeof(callback_list) / sizeof(_FUNCCALLBACK);
    int cmd_index = 0;


    for (cmd_index = 0; cmd_index < cmd_indexmax; cmd_index++)
    {
        if (callback_list[cmd_index].CMD == cmd)
        {
            if(callback_list[cmd_index].callback_func)
            {
                // 处理逻辑
                callback_list[cmd_index].callback_func(cmd, msg, len);
            }
        }
    }
}

这种方式的优点在于提供了一个模板,新增功能码只需在结构体中添加命令和对应的回调函数,而不需要修改主运行逻辑,大大降低了代码的可维护性。

进一步优化

为了进一步优化系统的命令解析,我们可以考虑将命令解析放入队列,并结合回调函数的方式进行解析。这样的设计使得命令解析模块更加通用,即使在更换单片机型号时,也能快速移植并保持代码的稳定运行。

// 将命令解析放入队列的伪代码
void command_queue_handler(void)
{
    // 从队列中获取命令
    rt_uint8_t cmd = get_command_from_queue();
    rt_uint8_t msg[MAX_MESSAGE_SIZE];
    rt_uint8_t len = get_message_length();


    // 调用命令解析函数
    poll_task(cmd, msg, len);
}

通过这样的设计,我们实现了一个灵活、模块化且可扩展的命令解析系统。这种模块化的设计不仅提高了系统的可维护性,还为未来的功能扩展提供了更大的空间。

总体而言,采用回调函数的方式优化嵌入式系统的命令解析是一个巧妙的设计选择,它不仅提高了代码的可读性和可维护性,还使系统更具扩展性。

在嵌入式系统开发中,我们应当注重采用更先进的设计思路,不断提升系统的性能和可维护性。

小编计划专门撰写系列文章,讲解如何提升系统的性能和可维护性。欢迎持续关注。

关于什么是“回调函数”,小编计划再专门撰写一篇文章进行详细的介绍,欢迎持续关注。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式系统
    +关注

    关注

    41

    文章

    3541

    浏览量

    129049
  • 函数
    +关注

    关注

    3

    文章

    4273

    浏览量

    62290
  • 命令
    +关注

    关注

    5

    文章

    671

    浏览量

    21959
  • 回调函数
    +关注

    关注

    0

    文章

    87

    浏览量

    11525

原文标题:优化嵌入式系统命令解析:回调函数的巧妙应用

文章出处:【微信号:玩转单片机与嵌入式,微信公众号:玩转单片机与嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    嵌入式Linux命令总结

    嵌入式Linux命令总结
    发表于 09-19 16:30 497次阅读

    函数的作用是什么?怎么使用回函数

    什么是js回函数?回函数的作用是什么?怎么使用回函数
    发表于 11-01 06:10

    嵌入式系统内存优化使用

    嵌入式系统功能的提高,占用了较大内存空间,继而时常出现运行无响应。基于用户方面看,由于系统内存问题影响运行,针对系统内存与进程应用状态研究,可以调整
    发表于 11-04 06:23

    如何对嵌入式系统进行优化

    系统为控制、监视或辅助设备、机器或用于工厂运作的设备。与个人计算机这样的通用计算机系统不同,嵌入式系统通常执行的是带有特定要求的预先定义的任务。由于
    发表于 12-21 06:24

    怎样去写回函数呢?怎样去使用回函数

    函数的作用是什么?单片机怎么用回函数在不同文件之间传递数据呢?怎样去写回
    发表于 02-23 07:40

    嵌入式机器视觉系统优化研究

    介绍了基于ARM+DSP架构的嵌入式机器视觉系统的特性,分析了制约嵌入式机器视觉系统性能的因素。从操作系统和应用程序方面,讨论了
    发表于 08-13 17:29 45次下载
    <b class='flag-5'>嵌入式</b>机器视觉<b class='flag-5'>系统</b><b class='flag-5'>优化</b>研究

    基于嵌入式机器视觉系统优化研究

    基于嵌入式机器视觉系统优化研究
    发表于 10-31 11:40 12次下载
    基于<b class='flag-5'>嵌入式</b>机器视觉<b class='flag-5'>系统</b><b class='flag-5'>优化</b>研究

    如何将嵌入式的代码优化

    嵌入式代码优化,除了最基本的函数实现细节算法优化外,还有一些细节的处理。
    发表于 09-25 09:34 1346次阅读

    嵌入式系统的全面解析

     嵌入式系统的应用十分广泛,因此越来越多的人学习嵌入式系统。由此,在学习嵌入式系统之前,我们应当
    发表于 01-03 17:47 3214次阅读

    嵌入式linux+io+优化,嵌入式Linux系统内存优化使用方法研究

    优化进而确保响应运行。并且经过实践证明,嵌入式系统内存优化使用,能够提升系统空间5%内存,确保系统
    发表于 11-01 16:31 10次下载
    <b class='flag-5'>嵌入式</b>linux+io+<b class='flag-5'>优化</b>,<b class='flag-5'>嵌入式</b>Linux<b class='flag-5'>系统</b>内存<b class='flag-5'>优化</b>使用方法研究

    嵌入式Linux开发工具5

    嵌入式Linux开发工具——shell编程 (脚本:批处理)Linux系统运维工程师(嵌入式开发–系统移植)shell:1、命令
    发表于 11-02 12:06 3次下载
    <b class='flag-5'>嵌入式</b>Linux开发工具5

    嵌入式设计课程总结5

    系统运维工程师(嵌入式系统开发–系统移植)shell:1.命令解析器 (将用户输入的
    发表于 11-03 15:36 15次下载
    <b class='flag-5'>嵌入式</b>设计课程总结5

    嵌入式开发软件中回函数的使用

    嵌入式开发软件中回函数是经常接触的一种软件设计方法,像我们的事件处理机制基本上都会使用到回函数
    的头像 发表于 04-29 08:57 2201次阅读

    嵌入式函数注册机制的实现

    嵌入式函数注册机制是一种常用的解耦技术,它通过在应用程序中注册回函数方式来实现模块之间的
    的头像 发表于 04-13 15:52 1306次阅读

    嵌入式open函数的使用

    嵌入式系统是指嵌入到其他设备或系统中,用于控制和管理硬件资源的计算机系统。在嵌入式
    的头像 发表于 01-04 15:51 575次阅读