最近在做一个项目,用到了多个I2C,RS232,SPI等总线的外设,当然,对每个设备都得编写一个设备硬件驱动,然后是设备应用层程序,再在其上加一个系统层程序。当然,这只是一个层次较低的嵌入式程序框架。
某日,突然在网上看到一篇**,《嵌入式实时操作系统μC/OS-II下通用驱动框架的设计与实现》,其中提到了两个数据结构
typedef struct {
INT8U deviceName[UDF_MAX_NAME]; //设备名
INT8U deviceType; //1—块设备, 2—字符设备;
INT8U canShared; //0---不可共享使用, 1—可共享使用
INT16U openCount; //对于共享设备,此字段为打开次数计数;
UDFOperations op; //设备驱动模块提供的设备操作函数表;
} UDFFramework;
typedef struct {
INT32S (*devOpen)(void *pd);
INT32S (*devRead)(INT8S *buffer, INT32U blen, INT32U lenToRead, INT8U waitType);
INT32S (*devWrite)(INT8S *buffer, INT32U lenToWrite, INT8U waitType);
INT32S (*devIoctl)(INT32U too, void *pd);
INT32S (*devClose)(void *pd);
} UDFOperations;
用这两个数据结构来屏蔽不同的设备驱动之间的差异,这个思路很好。但具体怎么操作?**中没有细说,所以在此希望有高手能提供此相应的资料,为大家作贡献!! |