s1j2h3 发表于 2014-9-25 15:28:53

有没有通用的嵌入式设备驱动框架程序?

最近在做一个项目,用到了多个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:31

没有人了解吗? 自己先顶一下

taboo 发表于 2014-9-25 16:18:43

s1j2h3 发表于 2014-9-25 15:49
没有人了解吗? 自己先顶一下

我觉得linux的驱动构架就很好

机器人天空 发表于 2014-9-25 16:19:41

帮顶,对架构方面很感兴趣{:lol:}

tarzar 发表于 2014-9-25 16:43:16

可以去了解一下LINUX怎么屏蔽底层的硬件,相应你会发现“新国内”

hustsolo 发表于 2014-9-25 16:53:46

得先看下楼主软件项目的复杂程度,如果就是一些常用的嵌入式外设的话,比如spi,i2c,uart等,就基于源文件管理驱动就行了,比如spi.c,spi.h,然后这些驱动对外提供一些望文生义的接口就行了,这样挺方便的。
如果说要统一的话,工程量比较大,项目不复杂的话,就得不偿失了。纯粹学习的话,推荐Linux设备驱动这本书,或者一本讲windows驱动的经典书籍,program windows driver module。 学Linux驱动的好处是可以直接看到代码,缺点是文档少了点,而学windows驱动的话,正好相反

lovecxm 发表于 2014-9-25 18:58:27

linux思路很好,但就是弄的太复杂。我喜欢精简版的。

security 发表于 2014-9-25 19:07:37

去分析下RT-Thread的框架吧,从小麻雀入手,去剖析五脏。

lindabell 发表于 2014-9-25 19:34:03

一些小项目,就会很麻烦的

armstrong 发表于 2014-9-25 22:04:51

其实,你要的正式rt-thread,去下载源代码看看吧。

liurangzhou 发表于 2014-9-25 22:29:25

armstrong 发表于 2014-9-25 22:04
其实,你要的正式rt-thread,去下载源代码看看吧。

读写里面没有timeout我总感觉不合适,我总喜欢blocking方式,不知道有没有这方面理论书籍推荐

cslrd 发表于 2014-9-25 22:29:57

QP 架构,不知道算不算

s1j2h3 发表于 2014-9-26 08:56:33

linux的我昨天稍微研究了一下,占用内存较多,适合有大容量RAM的芯片;而对于只有几K RAM的大多数单片机来说,负担过重了。
前面几位朋友说rt-thread有用,我去学习一下先{:smile:}

s1j2h3 发表于 2014-9-26 08:58:50

其实我还对不同的硬件模块,用统一的框架程序去屏蔽各自不同的细节兴趣。有点像设计模式中的桥接器了的概念了,呵呵。

mo959 发表于 2014-9-26 09:03:20

单片机不适合用Linux那套驱动框架

youthdou 发表于 2014-9-26 09:06:58

一直也在思考这个问题。想寻找这样一个框架。好的框架便于移植,以及后期维护。

abutter 发表于 2014-9-26 12:00:00

驱动本身就要适应 OS 的。

yzl0208994 发表于 2014-9-26 12:02:21

适合自己项目就好了

airwolf09921 发表于 2014-9-26 12:11:24

驱动满足使用功能需求就可以了

li.wen 发表于 2014-9-26 12:15:31

这个就是Linux通用的做法啊,建议去看看RT-Thread的驱动结构,更简单些

s1j2h3 发表于 2014-9-27 14:11:37

看来研究这个的人蛮少的啊{:sweat:}

一夕nandy 发表于 2014-9-27 20:15:16

考虑这种架构有半年了 RTT中看到一种 但是觉得还不是我想要的 继续摸索吧

s1j2h3 发表于 2014-9-28 12:56:21

是的,我们需要简单,实时的驱动方式

xCamel 发表于 2014-10-1 16:07:38

小型的系统没必要那么复杂吧

s1j2h3 发表于 2014-10-7 14:34:00

关键是思路,这个值得学习{:smile:}

lovecxm 发表于 2014-10-7 14:46:09

linux内核,但是楼主的驱动感觉还是很复杂的

lingdianhao 发表于 2014-10-7 14:49:37

还不如直接调用库函数来得方便,你这个都是在相同的平台上跑,也没有移植问题,就是你说的每个外设弄个驱动,挺麻烦,不过很好用。

ground 发表于 2014-10-7 15:16:13

如果从51过来的人不会这么普涨浪费,恨不得一个字节掰成2半用。

activeleo 发表于 2014-10-7 15:30:05

实际上我一直觉得Linux的驱动架构和RTT差不多的!都非常的好用!
页: [1]
查看完整版本: 有没有通用的嵌入式设备驱动框架程序?