函数指针作为结构体的成员

我发一个运行过的源码。
在.h文件中,有如下代码:

//TVM控制状态
typedef struct _m_TVM_CTRL
{
 u32(*get_coin_totval)(void); //得到此次投入硬币总金额
 u32(*get_coin_totcnt)(void); //得到此次投入硬币总数目
 void(*clr_coin)(void);   //清空金额和数目,每次新投币开始执行

 u32(*get_coin_totrval)(void);//得到此次找零的总金额
 u32(*get_coin_totrcnt)(void);//得到此次找零的硬币总数目
 void(*clr_rcoin)(void);   //清空金额和数目,每次新找零开始执行

 void(*clr_hpx)(void);      //清空某个hp中的所有硬币
 void(*thp_add_money)(void);  //将钱数汇总到循环找零hp中,当chg_mode为1的时候,可以执行该函数
  u8  cur_cmd;           //当前指令 0X00,无有效指令;0X32,开始收钱;0X33,硬币回收;0X34,找零; 
  u16 cmd_prm;         //指令参数
 u8  cmd_sta;                 //指令执行状态
 m_HP_MESSAGE hp_msg[4];   //每个hopper的状态信息
}m_TVM_CTRL; 
extern m_TVM_CTRL     TVM_CTRL;    //控制器

在.c文件中,有如下代码:
//TVM主控制器      
m_TVM_CTRL     TVM_CTRL=    //控制器
{
 get_coin_totval,
 get_coin_totcnt,
 clr_coin,

 get_coin_totrval,
 get_coin_totrcnt,
 clr_rcoin,

 clr_hpx,
 thp_add_money,
  0,
 0,
 0,
 0,   
};
get_coin_totva, clr_coinl等都是在.c文件中存在的函数的函数名。
这样,就完成了TVM_CTRL这个结构体的函数指针初始化,
接下来就可以方便应用了。
比如我要清空TVM的金额,我只需要写:TVM_CTRL.clr_coin();即可。
又比如,我要清空某个HOPPER,只需要写:TVM_CTRL.clr_hpx();
这样可以及其方便的管理某些设备的各个状态。

你可以把任何一个外设都定义为一个结构体,然后在这个里面包含了该外设的所有执行函数,及状态变量。从而非常方便的控制该外设。
更好的是,一旦有任何新增功能,只需要在原来的结构体里面塞函数或者变量就可以了。及其方便维护。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值