结构体对函数指针的高级封装应用

本文介绍了一种分层设计方法,通过实例展示了如何降低软件底层模块间的耦合度。具体介绍了PHY层结构体的定义及两种使用方式,包括内存分配与成员初始化的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分层设计考虑

作用:降低对底层应用程序的高耦合度

示例:

#include "mac.h"
typedef struct _phy_t{
    char channel;
    char snd_fail_count;
    char *name;
    char open_flag;

    void (*init)(void);
    int (*send_packet)(struct _phy_t phy, u8 *pdata, u8 len, u16 waitms);
    void (*recieve_packet)(u8 *data, u8 len, u16 waitms);

    rt_sem_t send_sem;
    rt_mq_t  send_mq;
    u8 recvbuff[DEFAULT_PACKET_LEN];
}phy_t;

用法一:
extern phy_t *phy_1, *phy_2;   //变量可供所有文件使用(只需包含该头文件)
/*
    需要在include "mac.c"定义一下变量
        phy_t *phy_1, *phy_2;
*/
在实际使用 时需要分配内存大小在:
int main(){
    phy_1 = (phy_t *)malloc(sizeof(phy_t));  //分配空间,否则**只占用四字节大小**内存<但不可使用>
    phy_2 = (phy_t *)malloc(sizeof)(phy_t);

    phy_1->init = si4463_init;
    /*
       (* phy_1->init)(void);   //直接进行解引用
    */

}
用法二:
extern phy_t phy_1, phy_2;   //变量可供所有文件使用(只需包含该头文件)
/*
    需要在include "mac.c"定义一下变量,直接为变量分配内存大小
        phy_t phy_1, phy_2;
*/
在实际使用 时直接使用即可:
int main(){
    phy_1.init = si4463_init;
    /*
       (* phy_1.init)(void);   //直接进行解引用
    */

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值