当前位置: 首页 > news >正文

网站情况建设说明书影楼网站模板

网站情况建设说明书,影楼网站模板,淄博网站设计公司,网站邮箱后台子域名前面我们学习I2C、USB、SD驱动时#xff0c;有没有发现一个共性#xff0c;就是在驱动开发时#xff0c;每个驱动都分层三部分#xff0c;由上到下分别是#xff1a; 1、XXX 设备驱动 2、XXX 核心层 3、XXX 主机控制器驱动 而需要我们编写的主要是设备驱动部分#xff0c… 前面我们学习I2C、USB、SD驱动时有没有发现一个共性就是在驱动开发时每个驱动都分层三部分由上到下分别是 1、XXX 设备驱动 2、XXX 核心层 3、XXX 主机控制器驱动 而需要我们编写的主要是设备驱动部分主机控制器驱动部分也有少量编写二者进行交互主要时由核心层提供的接口来实现这样结构清晰大大地有利于我们的驱动开发这其中就是利用了Linux设备驱动开发中两个重要思想下面来一一解析 一、设备驱动的分层思想 在面向对象的程序设计中可以为某一类相似的事物定义一个基类而具体的事物可以继承这个基类中的函数。如果对于继承的这个事物而言其某函数的实现与基类一致那它就可以直接继承基类的函数相反它可以重载之。这种面向对象的设计思想极大地提高了代码的可重用能力是对现实世界事物间关系的一种良好呈现。 Linux内核完全由C语言和汇编语言写成但是却频繁用到了面向对象的设计思想。在设备驱动方面往往为同类的设备设计了一个框架而框架中的核心层则实现了该设备通用的一些功能。同样的如果具体的设备不想使用核心层的函数它可以重载之。举个例子 [cpp] view plaincopy return_type core_funca(xxx_device * bottom_dev, param1_type param1, param1_type param2)   {       if (bottom_dev-funca)       return bottom_dev-funca(param1, param2);       /* 核心层通用的funca代码 */       ...   }   上述core_funca的实现中会检查底层设备是否重载了funca()如果重载了就调用底层的代码否则直接使用通用层的。这样做的好处是核心层的代码可以处理绝大多数该类设备的funca()对应的功能只有少数特殊设备需要重新实现funca()。 再看一个例子 [cpp] view plaincopy return_type core_funca(xxx_device * bottom_dev, param1_type param1, param1_type param2)   {       /*通用的步骤代码A */       ...       bottom_dev-funca_ops1();       /*通用的步骤代码B */       ...       bottom_dev-funca_ops2();       /*通用的步骤代码C */       ...       bottom_dev-funca_ops3();   }   上述代码假定为了实现funca()对于同类设备而言操作流程一致都要经过“通用代码A、底层ops1、通用代码B、底层ops2、通用代码C、底层ops3”这几步分层设计明显带来的好处是对于通用代码A、B、C具体的底层驱动不需要再实现而仅仅只关心其底层的操作ops1、ops2、ops3。图1明确反映了设备驱动的核心层与具体设备驱动的关系实际上这种分层可能只有2层图1的a也可能是多层的图1的b。 这样的分层化设计在Linux的input、RTC、MTD、I2 C、SPI、TTY、USB等诸多设备驱动类型中屡见不鲜。 二、主机驱动和外设驱动分离思想 主机、外设驱动分离的意义 在Linux设备驱动框架的设计中除了有分层设计实现以外还有分隔的思想。举一个简单的例子假设我们要通过SPI总线访问某外设在这个访问过程中要通过操作CPU XXX上的SPI控制器的寄存器来达到访问SPI外设YYY的目的最简单的方法是 [cpp] view plaincopy return_type xxx_write_spi_yyy(...)   {       xxx_write_spi_host_ctrl_reg(ctrl);       xxx_ write_spi_host_data_reg(buf);       while(!(xxx_spi_host_status_reg()SPI_DATA_TRANSFER_DONE));       ...   }   如果按照这种方式来设计驱动结果是对于任何一个SPI外设来讲它的驱动代码都是CPU相关的。也就是说当然用在CPU XXX上的时候它访问XXX的SPI主机控制寄存器当用在XXX1的时候它访问XXX1的SPI主机控制寄存器 [cpp] view plaincopy return_type xxx1_write_spi_yyy(...)   {       xxx1_write_spi_host_ctrl_reg(ctrl);       xxx1_ write_spi_host_data_reg(buf);       while(!(xxx1_spi_host_status_reg()SPI_DATA_TRANSFER_DONE));       ...   }   这显然是不能接受的因为这意味着外设YYY用在不同的CPU XXX和XXX1上的时候需要不同的驱动。那么我们可以用如图的思想对主机控制器驱动和外设驱动进行分离。这样的结构是 外设a、b、c的驱动与主机控制器A、B、C的驱动不相关主机控制器驱动不关心外设而外设驱动也不关心主机外设只是访问核心层的通用的API进行数据传输主机和外设之间可以进行任意的组合 。如果我们不进行上图的主机和外设分离外设a、b、c和主机A、B、C进行组合的时候需要9个不同的驱动。设想一共有m个主机控制器n个外设分离的结果是需要mn个驱动不分离则需要m*n个驱动。 Linux SPI、I2C、USB、ASoCALSA SoC等子系统都典型地利用了这种分离的设计思想。
http://www.pierceye.com/news/18518/

相关文章:

  • 先进的网站建设网络营销的推广方式
  • 做网站的广告做一个网站成本是多少
  • 公司网站开发建设什么会计科目现在做网站都是怎么做的
  • 旅游网站建设步骤工信部域名备案信息查询
  • 中国建设银行官网的网站首页网站建设公司咨
  • 一个ip 做2个网站品牌建设成效有待提升
  • 自动生成手机网站北京网站优化wyhseo
  • linux服务器怎么做网站化妆品网站的建设 论文
  • 医院建设网站的作用免费软件开发app
  • 外贸网站设计模板惠阳建设局网站
  • 服务类网站模板大连海洋大学工程建设信息网
  • 小说发表哪个网站赚钱网站建设新方向
  • 承德网站建设怎么做滁州百度seo
  • 建设网站一定要数据库吗app小程序开发价格
  • 做公益网站wordpress 如何修改导航链接
  • 如何微信做演讲视频网站wordpress不显示引用图片不显示
  • 网站建设的步骤教程视频室内设计学校大专
  • 免费域名申请网站大全下载会员网站建设
  • 券多多是谁做的网站微信链接网站怎么做
  • 做网站 空间wordpress 判断
  • 有什么类似凡科建站台州自助建站在线咨询
  • 湖南网站开发公司电话宁波网站制作设计
  • 砀山县住房和城乡建设局网站开发公司前期部岗位职责
  • 长沙企业网站建设团队有二维码怎样做网站
  • 正保建工网校官网seo网站建设哪家专业
  • 网站首页地址是什么微信下载安装2024最新版
  • 制作手机网站什么软件下载wordpress 采集函数
  • 投资网站开发wordpress安装用户名密码
  • 安徽建网站国外网站怎么做引流
  • 织梦网站首页栏目修改wordpress空间安装教程视频教程