...要找mdk下实现动态加载函数的方法(有一个基础HEX1主要实现单片机的配置,和100多个HEX2(每个HEX2是一个设备的通信协议),HEX1与HEX2相互通信,每次加载HEX2数量为1-5个 ),网上有人提示数据化编程,但是没找到相关资料,看到了数据驱动编程,这种方法提高了原来由一堆if...else构建的消息-处理模块,在此把思想转为程序,并且调试完毕
#include"dyhead.h"
void fun1(void *param);
void fun2(void *param);
void fun3(void *param);
void fun4(void *param);
typedef void (*msgfunc)(void *param);
typedef struct _msg
{
char *strmsg;
msgfunc fun_ptr;
}MSG;
MSG szmsg[]=
{
{"m1",fun1},
{"m2",fun2},
{"m3",fun3},
{"m4",fun4}
};
void fun1(void *param)
{
LOG_INFO("::fun1 .%s ",(char *)param);
}
void fun2(void *param)
{
LOG_INFO("::fun2 .%s" ,(char *)param);
}
void fun3(void *param)
{
LOG_INFO("::fun3 .%s",(char *)param);
}
void fun4(void *param)
{
LOG_INFO("::fun4 .%d",(int *)param);
}
void Proc_Msg(char *msg,void *msgparam)
{
int msg_cnt=0;
int i=0;
msg_cnt = sizeof(szmsg)/sizeof(MSG);
LOG_DEBUG("Count of msg is :%d ",msg_cnt);
for(i=0;i<msg_cnt;i++)
{
if(strcmp(msg,szmsg[i].strmsg) ==0)
{
LOG_INFO("Find %s",msg);
szmsg[i].fun_ptr(msgparam);
return ;
}
}
LOG_ERR("No find %s msg",msg);
}
void main()
{
LOG_ERR("Driver Process \n");
Proc_Msg("m1","M1 msg");
Proc_Msg("m2","driver process _msg");
Proc_Msg("m4",129);
}
/*PS: 对于M4的消息,想显示数值需要直接传递相关数据,如本例中129*/