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

分层设计考虑

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

示例:

#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);   //直接进行解引用
    */

}

你可能感兴趣的:(c语言沉思录)