对于数据驱动编程的实现(1)

...要找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 {
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*/


你可能感兴趣的:(程序总结)