简介
1、什么叫做适配器???????
适配器是在具有直接调用的上下两层之间,约定好的、固定的调度方式。
2、适配器的用途?????
1、当程序底层驱动发生改变的时候,可以写一个适配器来贯通APP与新的驱动,这样APP层就可以不改了
2、保持一致性:比如目前我的板卡上有两个网口,一个是SPI扩展的W5500,一个是RMII扩展的8384。如果给两个封装统一的接口。那么,如果后续设计、评估需要改变两个网口的功能,就可以像调换串口一样简单了。
适配器的设计注意事项?????
1、由于C程序中绝对不可以存在名称完全一致的全局函数(非static)和全局数据结构定义(不能有同名的结构体)。所以不可以采用所有模块,都取同一个变量和函数名的方式处理。
适配器的实现方法?????
文章只考虑系统中存在两个以上底层不同、但是具备相互替代性的系统。(简单的替换很简单,就不多说了),个人总结总共两个。大家可以根据自己的实际情况选择。
1、通过宏定义:这种方式代码结构要好,也就是思路清晰不要满世界include?????
#include "adap.h"
test.c
int test()
{
adap_init();
for(;;)
{
if(adap_chek() == 1)
{
adap_deal();
}
}
return 0;
}
adap.h
#ifndef __ADAP_H
#define __ADAP_H
#ifdef __cplusplus
#extern "c" {
#endif
#include "driverA.h"
// #include "driverB.h"
#define adap_init() driverA_open(9600)
#define adap_chek() if(driverAGetStat(reg_B) == READY){ \
if(driverACheckData(dat_B) == OK){ \
return 1 \
} \
return 0; \
}
#define adap_deal() driverBDeal(dat_B)
#ifdef __cplusplus
#extern "c" {
#endif
#endif
2、通过静态函数区分:由于静态函数会自动屏蔽全局函数,所以这种方法比较简单,很适合混乱无比的代码。但是由于结构体名不可以重复,可能数据结构名上必须稍微有所区别。这里就不举例了,有需求的同学留言。??????