函数指针数组实现对于多个相似功能函数的调用

1、函数指针数组使用笔记
函数名就是该函数的地址,可以通过指针进行寻址调用

//应用场景:对于需实现的类似功能比较多的情况,使用这种数组进行分类把类似的功能的函数通过指针的形式做成一个数组集合。
//然后通过一个数组的形式调用,通过下标区分不同的函数实现的功能,switch-case一次调用实现对于该类的函数不同的调用,避免了重复的调用,节省了大量的空间。

//通过switch case的形式实现对应函数的调用,传递过来的是一串串口的协议数字 找到对应的字段俩调用对应的函数。不需要遍历就可以实现函数的调用,采用的是一一对应的方式。
//如果没有很好的一一对应的关系就采用遍历的方式实现函数的调用

//组播的成员表在驱动部分就是这样存储的。 标红的地方对应的是函数指针数组的下标,一一对应的关系
例如:00 01 02 38 47 47 47 每个数字代表的是一个含义

有两个地方是需要注意的:
1、函数指针数组还是结构体数组,取决于需要实现的功能的情况。
2、存储的方式,数组还是链表,取决于多少。
3、一一对应还是遍历,实际情况而论

//调用的地方
process_wifi_to_zc_cmd_zigbee[cmd2](rBuf, len);

//结构体该可以以链表的形式存储起来

//注册的地方 需要实现的函数放到函数指针数组里面
//把需要注册进去的函数在这里注册使用
void (process_wifi_to_zc_cmd_zigbee[18])(int8u, int8u) = {

ProcessDeleteNetworkReq,
ProcessChangeChannelReq,
ProcessSetPermitJoiningTimeReq,
NULL,
ProcessResetToTheFactoryReq,
ProcessBindingReq,
ProcessConfigReportReq,
processGetDeviceAttributeReq,
NULL,
processSetDeviceAttributeReq,
NULL,
NULL,
ProcessNewBindingReq,
ProcessAddGroup,
ProcessRemoveGroup,
ProcessRemoveAllGroup,
ProcessGetNwkAddressReq,
process_SendCustomerData_Req,

};

//实现方式
//对应函数的实现

static void process_SendCustomerData_Req(int8u *rBuf,int8u len)
{

int16u mfg_code = mfgSpecificId;
mfgSpecificId = EMBER_AF_MANUFACTURER_CODE;
zclBufferSetup(ZCL_CLUSTER_SPECIFIC_COMMAND
                        |ZCL_FRAME_CONTROL_CLIENT_TO_SERVER
                        |ZCL_DISABLE_DEFAULT_RESPONSE_MASK,
                        ZCL_USER_DATA_TRANSFER_CLUSTER_ID,
                        ZCL_WRITE_DATA_COMMAND_ID);
mfgSpecificId = mfg_code;
zclBufferAddBuffer(&rBuf[5],12);
emberAfGuaranteedPrintln("[process_SendCustomerData_Req] buflen:%d",len);
if (EMBER_SUCCESS != status) {
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值