有没有通用的嵌入式设备驱动框架程序?
最近在做一个项目,用到了多个I2C,RS232,SPI总线的外设,当然,对每个设备都得编写一个设备硬件驱动,然后是设备应用层程序,再在其上加一个系统层程序。当然,这只是一个层次较低的嵌入式程序框架。某日,突然在网上看到一篇文章,《嵌入式实时操作系统μC/OS-II下通用驱动框架的设计与实现》,其中提到了两个数据结构
typedef struct {
INT8U deviceName; //设备名
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;
用这两个数据结构来屏蔽不同的设备驱动之间的差异,这个思路很好。但具体怎么操作?文章中没有细说,所以在此希望有高手能提供此相应的资料,为大家作贡献!!
{:handshake:}
没有人了解吗? 自己先顶一下 s1j2h3 发表于 2014-9-25 15:49
没有人了解吗? 自己先顶一下
我觉得linux的驱动构架就很好 帮顶,对架构方面很感兴趣{:lol:} 可以去了解一下LINUX怎么屏蔽底层的硬件,相应你会发现“新国内” 得先看下楼主软件项目的复杂程度,如果就是一些常用的嵌入式外设的话,比如spi,i2c,uart等,就基于源文件管理驱动就行了,比如spi.c,spi.h,然后这些驱动对外提供一些望文生义的接口就行了,这样挺方便的。
如果说要统一的话,工程量比较大,项目不复杂的话,就得不偿失了。纯粹学习的话,推荐Linux设备驱动这本书,或者一本讲windows驱动的经典书籍,program windows driver module。 学Linux驱动的好处是可以直接看到代码,缺点是文档少了点,而学windows驱动的话,正好相反 linux思路很好,但就是弄的太复杂。我喜欢精简版的。 去分析下RT-Thread的框架吧,从小麻雀入手,去剖析五脏。 一些小项目,就会很麻烦的 其实,你要的正式rt-thread,去下载源代码看看吧。 armstrong 发表于 2014-9-25 22:04
其实,你要的正式rt-thread,去下载源代码看看吧。
读写里面没有timeout我总感觉不合适,我总喜欢blocking方式,不知道有没有这方面理论书籍推荐 QP 架构,不知道算不算 linux的我昨天稍微研究了一下,占用内存较多,适合有大容量RAM的芯片;而对于只有几K RAM的大多数单片机来说,负担过重了。
前面几位朋友说rt-thread有用,我去学习一下先{:smile:} 其实我还对不同的硬件模块,用统一的框架程序去屏蔽各自不同的细节兴趣。有点像设计模式中的桥接器了的概念了,呵呵。 单片机不适合用Linux那套驱动框架 一直也在思考这个问题。想寻找这样一个框架。好的框架便于移植,以及后期维护。 驱动本身就要适应 OS 的。 适合自己项目就好了 驱动满足使用功能需求就可以了 这个就是Linux通用的做法啊,建议去看看RT-Thread的驱动结构,更简单些 看来研究这个的人蛮少的啊{:sweat:} 考虑这种架构有半年了 RTT中看到一种 但是觉得还不是我想要的 继续摸索吧 是的,我们需要简单,实时的驱动方式 小型的系统没必要那么复杂吧 关键是思路,这个值得学习{:smile:} linux内核,但是楼主的驱动感觉还是很复杂的 还不如直接调用库函数来得方便,你这个都是在相同的平台上跑,也没有移植问题,就是你说的每个外设弄个驱动,挺麻烦,不过很好用。 如果从51过来的人不会这么普涨浪费,恨不得一个字节掰成2半用。 实际上我一直觉得Linux的驱动架构和RTT差不多的!都非常的好用!
页:
[1]