搜索
bottom↓
回复: 28

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

[复制链接]

出0入0汤圆

发表于 2014-9-25 15:28:53 | 显示全部楼层 |阅读模式
最近在做一个项目,用到了多个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;

用这两个数据结构来屏蔽不同的设备驱动之间的差异,这个思路很好。但具体怎么操作?文章中没有细说,所以在此希望有高手能提供此相应的资料,为大家作贡献!!

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

 楼主| 发表于 2014-9-25 15:49:31 | 显示全部楼层
没有人了解吗? 自己先顶一下

出0入0汤圆

发表于 2014-9-25 16:18:43 | 显示全部楼层
s1j2h3 发表于 2014-9-25 15:49
没有人了解吗? 自己先顶一下

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

出0入0汤圆

发表于 2014-9-25 16:19:41 | 显示全部楼层
帮顶,对架构方面很感兴趣

出0入4汤圆

发表于 2014-9-25 16:43:16 | 显示全部楼层
可以去了解一下LINUX怎么屏蔽底层的硬件,相应你会发现“新国内”

出0入0汤圆

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

出0入0汤圆

发表于 2014-9-25 18:58:27 | 显示全部楼层
linux思路很好,但就是弄的太复杂。我喜欢精简版的。

出0入8汤圆

发表于 2014-9-25 19:07:37 来自手机 | 显示全部楼层
去分析下RT-Thread的框架吧,从小麻雀入手,去剖析五脏。

出0入8汤圆

发表于 2014-9-25 19:34:03 | 显示全部楼层
一些小项目,就会很麻烦的

出870入263汤圆

发表于 2014-9-25 22:04:51 | 显示全部楼层
其实,你要的正式rt-thread,去下载源代码看看吧。

出0入0汤圆

发表于 2014-9-25 22:29:25 | 显示全部楼层
armstrong 发表于 2014-9-25 22:04
其实,你要的正式rt-thread,去下载源代码看看吧。

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

出0入0汤圆

发表于 2014-9-25 22:29:57 | 显示全部楼层
QP 架构,不知道算不算

出0入0汤圆

 楼主| 发表于 2014-9-26 08:56:33 | 显示全部楼层
linux的我昨天稍微研究了一下,占用内存较多,适合有大容量RAM的芯片;而对于只有几K RAM的大多数单片机来说,负担过重了。
前面几位朋友说rt-thread有用,我去学习一下先

出0入0汤圆

 楼主| 发表于 2014-9-26 08:58:50 | 显示全部楼层
其实我还对不同的硬件模块,用统一的框架程序去屏蔽各自不同的细节兴趣。有点像设计模式中的桥接器了的概念了,呵呵。

出0入0汤圆

发表于 2014-9-26 09:03:20 | 显示全部楼层
单片机不适合用Linux那套驱动框架

出0入0汤圆

发表于 2014-9-26 09:06:58 | 显示全部楼层
一直也在思考这个问题。想寻找这样一个框架。好的框架便于移植,以及后期维护。

出0入12汤圆

发表于 2014-9-26 12:00:00 | 显示全部楼层
驱动本身就要适应 OS 的。

出0入0汤圆

发表于 2014-9-26 12:02:21 | 显示全部楼层
适合自己项目就好了

出0入0汤圆

发表于 2014-9-26 12:11:24 来自手机 | 显示全部楼层
驱动满足使用功能需求就可以了

出0入0汤圆

发表于 2014-9-26 12:15:31 | 显示全部楼层
这个就是Linux通用的做法啊,建议去看看RT-Thread的驱动结构,更简单些

出0入0汤圆

 楼主| 发表于 2014-9-27 14:11:37 | 显示全部楼层
看来研究这个的人蛮少的啊

出0入0汤圆

发表于 2014-9-27 20:15:16 | 显示全部楼层
考虑这种架构有半年了 RTT中看到一种 但是觉得还不是我想要的 继续摸索吧

出0入0汤圆

 楼主| 发表于 2014-9-28 12:56:21 | 显示全部楼层
是的,我们需要简单,实时的驱动方式

出0入0汤圆

发表于 2014-10-1 16:07:38 | 显示全部楼层
小型的系统没必要那么复杂吧

出0入0汤圆

 楼主| 发表于 2014-10-7 14:34:00 | 显示全部楼层
关键是思路,这个值得学习

出0入0汤圆

发表于 2014-10-7 14:46:09 | 显示全部楼层
linux内核,但是楼主的驱动感觉还是很复杂的

出0入0汤圆

发表于 2014-10-7 14:49:37 | 显示全部楼层
还不如直接调用库函数来得方便,你这个都是在相同的平台上跑,也没有移植问题,就是你说的每个外设弄个驱动,挺麻烦,不过很好用。

出50入0汤圆

发表于 2014-10-7 15:16:13 | 显示全部楼层
如果从51过来的人不会这么普涨浪费,恨不得一个字节掰成2半用。

出0入0汤圆

发表于 2014-10-7 15:30:05 | 显示全部楼层
实际上我一直觉得Linux的驱动架构和RTT差不多的!都非常的好用!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-2 23:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表