硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2488|回复: 2
收起左侧

[客户分享] ....分享一个数字驱动函数...

[复制链接]

27

主题

91

回帖

172

积分

初级会员

积分
172
发表于 2018-5-28 20:59:40 | 显示全部楼层 |阅读模式

...要找mdk下实现动态加载函数的方法(有一个基础HEX1主要实现单片机的配置,和100多个HEX2(每个HEX2是一个设备的通信协议),HEX1与HEX2相互通信,每次加载HEX2数量为1-5个 ),网上有人提示数据化编程,但是没找到相关资料,看到了数据驱动编程,这种方法提高了原来由一堆if...else构建的消息-处理模块,在此把思想转为程序,并且调试完毕


PS: 实在不知道放在哪个版块,暂时放在F4下。。。

#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.strmsg) ==0)
                {
                        LOG_INFO("Find %s",msg);
                        szmsg.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*/


评分

参与人数 1金币 +100 收起 理由
eric2013 + 100 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107882
QQ
发表于 2018-5-29 10:43:31 | 显示全部楼层
非常感谢楼主分享
回复

使用道具 举报

27

主题

91

回帖

172

积分

初级会员

积分
172
 楼主| 发表于 2018-5-29 16:33:04 | 显示全部楼层
eric2013 发表于 2018-5-29 10:43
非常感谢楼主分享

....感谢大汉兄,这个消息模型在实际应用中还好用...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-17 09:35 , Processed in 0.269758 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表