1.问题描述:
我有这样一种想法,下位机分为很多个不同的模块,每个模块有自己的函数,如下代码数组所示,
UNIT1,UNIT2,UNIT3它们代表着不同的单元,每个单元下有不同的命令,Fun1~Fun18分别是它们的命令执行函数。
想通过上位机发送命令帧到下位机,命令帧包含了单元以及命令等信息,每个命令帧都对应一条执行函数.
调用FindExecFuncUnit去查找该条命令对应的执行函数。针对这样的情景,以下代码这是我的一种实现想法,
小伙伴们觉得这种写法怎么样,可不可取?或者有没有经验的前辈有更好的实现方式呢?
还麻烦给点建议或者有现成的框架可以参考一下,谢谢!
typedef struct _CMD_UNIT
{
LOGIC_UNIT UNIT_NO;
uint8_t cmd;
uint8_t subCmd;
ParseRst parseCmdFunc;
}CMD_UNIT;
CMD_UNIT arr[][4] =
{
{UNIT1, CMD1, SUBCMD1, Fun1},
{UNIT1, CMD1, SUBCMD2, Fun2},
{UNIT1, CMD1, SUBCMD3, Fun3},
{UNIT1, CMD1, 0x00, NULL}, //0x01主命令下没有这个命令
{UNIT1, CMD2, SUBCMD1, Fun4},
{UNIT1, CMD2, SUBCMD2, Fun5},
{UNIT1, CMD2, SUBCMD3, Fun6},
{UNIT1, CMD2, 0x00, NULL},
{UNIT1, 0x00, 0x00, NULL}, //UNIT1单元下没有这个主命令
/***********************************************/
{UNIT2, CMD1, SUBCMD1, Fun7},
{UNIT2, CMD1, SUBCMD2, Fun8},
{UNIT2, CMD1, SUBCMD3, Fun9},
{UNIT2, CMD1, 0x00, NULL},
{UNIT2, CMD2, SUBCMD1, Fun10},
{UNIT2, CMD2, SUBCMD2, Fun11},
{UNIT2, CMD2, SUBCMD3, Fun12},
{UNIT2, CMD2, 0x00, NULL},
{UNIT2, 0x00, 0x00, NULL},
/***********************************************/
{UNIT3, CMD1, SUBCMD1, Fun13},
{UNIT3, CMD1, SUBCMD2, Fun14},
{UNIT3, CMD1, SUBCMD3, Fun15},
{UNIT3, CMD1, 0x00, NULL},
{UNIT3, CMD2, SUBCMD1, Fun16},
{UNIT3, CMD2, SUBCMD2, Fun17},
{UNIT3, CMD2, SUBCMD3, Fun18},
{UNIT3, CMD2, 0x00, NULL},
{UNIT3, 0x00, 0x00, NULL},
/***********************************************/
{0x00, 0x00, 0x00, NULL} //0x00未知单元
};
ParseRst FindExecFuncUnit(PSTD_CMD pCmd)
{
PCMD_FUNCTION_INFO pInfo = (PCMD_FUNCTION_INFO)pCmd;
uint8_t i;
for(i = 0; pInfo->Unit != 0x00; i++)
{
if((pInfo->Cmd == arr[i][1]) && pInfo->SubCmd == arr[i][2]))
{
if((arr[i][1] != 0x00) && (arr[i][2] != 0x00))
return return arr[i][3];
else
return NULL;
}
}
return NULL;
}
一周热门 更多>