回调函数关于回调函数,在之前的文章《回调函数》中有详细的讲解。前面对回调函数的讲解,都是以串口为例。使用回调函数可以方便通讯库的封装。芯片/模块厂商的SDK和一些开源库经常这样做,可以实现模块之间的解耦,模块化编程。本文主要讲解回调函数在命令解析中的应用。一般命令中都会有一个功能码,用来区分命令执行的是什么动作以及命令字后面数据的含义。在这种场景下,使用回调函数是一个不错的选择。经典写法在命令解析中,经典写法是使用switchcase语句。这种写法非常经典和基础,即使是刚学C语言的新手也能看懂。voidpoll_task(rt_uint8_tcmd,rt_uint8_t*msg,uint8_tlen){switch(cmd){casecmd1:func1();休息;casecmd2:func2();休息;casecmd3:func3();();休息;默认值:default_func();休息;}}它的缺点是如果添加函数代码,需要修改poll_task函数,添加case语句。如果要统计功能码的个数,只能手动统计。使用回调函数和函数代码绑定更方便,结构更清晰。回调函数功能码及回调函数绑定方式typedefstruct{rt_uint8_tCMD;rt_uint8_t(*callback_func)(rt_uint8_tcmd,rt_uint8_t*msg,uint8_tlen);}_FUNCCALLBACK;_FUNCCALLBACK回调列表[]={{cmd1,func_callback1},{,func_callback2},{cmd3,func_callback3},{cmd4,func_callback41},...};voidpoll_task(rt_uint8_tcmd,rt_uint8_t*msg,uint8_tlen){intcmd_indexmax=sizeof(callback_list)/sizeof(_FUNCint_indcmd)=0;for(cmd_index=0;cmd_index
