|
发表于 2014-1-10 22:03:47
|
显示全部楼层
之前看MDK 5.0自带的驱动,全部打包起来,封装N层进进出出,好麻烦.不过确实跨平台的很彻底.
这里照猫画虎来个简单的:
HAL层的对下接口UartDrv.C中:
typedef struct UART_Drv{
///Fields
UART_DrvType DrvInfo;
__IO U32 uartConf_1;
__IO U32 uartConf_2;
...
///Functions
bool *Config;
CallBackType *UartReceived;
CallBackType *UartSend;
CallBackType *UartTimeOut;
...
///Operation objects &attributes
U8 *ReadBuffer;
U8 *SendBuffer;
}UartDrvStructure;
里面每个字段,方法,对象都在C文件这里实现,实现不了的往底层走直接从底层包装方法上来.
HAL层的对上接口UartDrv.h就负责将C文件里面需要暴露的东西做成接口给上层用.
然后呢,user.c里面就是
UartDrvStructure USART2_Drv;(针对特定平台的HAL可以直接把这个USART2_Drv的内容固化下来成一个const的结构,然后再用typedef包装一层)
USART2_Drv.Config(*argument...);
USART2_Drv.UartSend(*string...);
最近在写C#,借鉴一下OO的思想,UartDrv就是一个完整的类,只写在C里面的就是privet的,写在H里面的就是public的,函数就是方法,静态方法和内部方法神马的不说,正常函数,但是属性和代理这些高级点的玩意都可以用CallBack实现,用以实现更灵活的方法. |
|