嵌入式系统通用驱动程序接口及其实现-IO口
应用场景
- 指示灯 输出
- 按键识别 输入
18B20 1Wire总线 IO 输入 输出 双向
不同嵌入式硬件上的驱动 指示灯 O输入高电平或低电平
- C51
p1^1 = 1;
p1^1 = 0; - LPC_ARM
GPIOA->SET = (1 << 29);
GPIOA->CLR = (1 << 29); - AVR
PORTD |= 0x80;
PORTD &= ~0X80;
- C51
面各对像的方式 C++ C语言 实现接口。
全部功能接口实现->精简
C++接口
class IoCtrl{
public:
//构造函数:
IoCtrl();
//行为
void SetIn();
void SetOut();
bool IsOut() const;
void SetHi();
void ClrHi();
bool IsHi() const;
void SetPullUp();
void ClrPullUp();
bool IsPullUp();
private:
//属性:
bool Out;
bool Hi;
bool PullUp;
};
- 指示灯实现:
class IoCtrl IoLed;
IoLed.SetOut();
IoLed.SetHi();
delayMs(1000);
IoLed.SetLow();
*按键实现:
class IoCtrl IoKey;
IoKey.SetIn();
IoKey.SetPullUp();
bool IsHi = IoKey.IsHi();
C语言
struct _IoCtrl{
//构造函数:
Init();
//行为:
void (*SetIn)(void);
void (*SetOut)(void);
bool (*IsOut)();
void (*SetHi)(void);
void (*ClrHi)(void);
bool (IsHi)();
//读IO口
void (*SetHiLevel)(void);
void (*ClrHiLevel)(void);
bool (IsHiLevel)();
void (*SetPullUp)(void);
void (*ClrPullUp)();
bool (*IsPullUp)();
//属性:
bool IsOut;
bool IsHi;
bool IsPullUp;
};
const struct _IoCtrl IoLed = {
Init_Led,
.
.
.
}
IoCtrl_Avr_V100.h // AVR中实现 LedCtrler项目
.
//指示灯IO接口实现
#define Init_Led() do{DDRB |= 0X80; PORTB &= ~0X80; }while(0)
#define SetHi_Led() do{PORTB |= 0X80; }while(0)
#define ClrHi_Led() do{PORTB &= ~0X80; }while(0)
//按键
#define Init_Key() do{PORTB |= 0X40;DDRB &= ~0X40;}while(0)
#define IsHiLevel_Key() (PINB & 0X40)
IoCtrl_Avr_V200.h // AVR中实现 LedCtrler项目
.
//指示灯IO接口实现
#define Init_Led() do{DDRB |= 0X40; PORTB &= ~0X40; }while(0)
#define SetHi_Led() do{PORTB |= 0X40; }while(0)
#define ClrHi_Led() do{PORTB &= ~0X40; }while(0)
//按键
#define Init_Key() do{PORTB |= 0X40;DDRB &= ~0X40;}while(0)
#define IsHiLevel_Key() (PINB & 0X40)
IoCtrl_LPC_ARM.h //LPC_ARM LedCtrler项目
//按键
#define Init_Key() do{GPIOA->PULL_PU = (1 << 29); GPIOA->DDR = (1 << 29);}while(0)
#define IsHiLevel_Key() (GPIOA->PIN & (1 << 29))
???.c文件:
#inlude “IoCtrl.h”
.
.
.
IsHiLevel_Key();
“IoCtrl.h“重实现:
#ifdef SUPPPORT_AVR
#ifdef HW_VERSION_V100
#include “IoCtrl_Avr_V100.h”
#endif
#ifdef HW_VERSION_V100
#include “IoCtrl_Avr_V200.h”
#endif
#endif
#ifdef SUPPPORT_LPC_ARM
#include "IoCtrl_LPC_ARM.h.h"
#endif