驱动设计思想(机制、策略、分离、分层)
1、机制和策略
(1)机制就是提供什么功能,策略就是怎么使用这些功能。在编写驱动时需要在编程时间和驱动的灵活性之间取一个可接受的折中,驱动提供机制,尽量不提供策略,策略让上层应用去做。
(2)机制和策略的分离使得驱动有更好的移植性。同一个硬件可能在不同的环境和不同功能的设备里使用,当机制和策略分离时,同一个硬件就只需要修改策略不需要修改机制。比如硬盘的驱动,
会将硬盘初始化并提供读写接口,但是谁有权访问、什么时候读写、每次读写多少数据都是上层去控制。这优点类似RISC架构,只提供基础操作,功能要上层开发人员去做。
2、分离思想
(1)操作方法和数据分离。操作方法指的是这款硬件的操作时序,数据是怎么配置、初始化硬件。同一款硬件无论用在什么地方,操作时序是不变的,时序是和具体硬件挂钩的,但是不同的产品使用
硬件时时会有差异的,产品会根据自己的需求来配置硬件,使得硬件有不同的特性。比如DM9000网卡芯片,有16bit模式和8bit模式,开发人员可以根据需要去配置,DM9000网卡信息也提供了机制
让程序员去配置,但不管是哪种模式网卡芯片收发数据的逻辑流程是一样的。
(2)分离的好处:移植驱动代码时,只需要根据硬件的接线方式,去配置相应的参数(也就是数据),不用修改代码(操作方法)。
3、分层思想
(1)分层思想:将同功能硬件的共性抽离出来形成一个软件层,将差异保留在硬件的具体驱动代码中,这样可以屏蔽硬件差异,当硬件发生改变时,上层代码不用改变。
(2)比如SD卡,不论哪款SD卡都需要提供初始化接口、读接口、写接口,我们可以把接口抽象成函数指针,用函数指针去实现操作SD卡的流程。在移植SD卡驱动时,就是把函数指针具象化成SD卡驱动里实现的对应接口。这类似协议,满足统一协议的硬件,对上层的程序员来说几乎一样,只有一些细微差别,协议就是这些硬件的共性,但是不同的硬件实现这些协议的方式有差别。
4、总结:
(1)机制和策略思想:简化驱动编写的难度,给上层保留尽可能多的灵活性;
(2)分离思想:移植驱动代码时,只需要改动配置参数,不需要改动驱动源码,降低驱动的移植难度;
(3)分层思想:当替换同功能不同款的硬件时,不用改动上层代码;
驱动设计思想(机制、策略、分离、分层)相关推荐
- 领域驱动设计(DDD):分层架构的三种模式
DDD DDD(Domain Driven Design,领域驱动设计)作为一种软件开发方法,它可以帮助我们设计高质量的软件模型.在正确实现的情况下,我们通过DDD完成的设计恰恰就是软件的工作方式. ...
- 计算机设计思想 —— 解耦(分离)与内聚
分离.解耦是模块化的基础.概念.功能上的辨异,又是实现分离.解耦的法门. 模块间通信:接口: 模块间绝非各自为营,独立作战: 业务与管理的分离: 数据与控制的分离: 用户面,信令面: 数据链路,控制链 ...
- 基于领域驱动设计思想Abp框架的考试系统
后端使用企业技术,但有部分阉割. 使用技术: 数据库:Sql Server 后端:.Net5.ABP vNext.AutoMapper.AutoFac.Dapper.EPlus 前端:Vue.js + ...
- 【嵌入式Linux】嵌入式Linux驱动开发基础知识之驱动设计的思想:面向对象/分层/分离
文章目录 前言 1.分离设计 驱动程序分析---程序分层 通用驱动程序---面向对象 个性化驱动程序---分离 APP 程序分析 前言 韦东山嵌入式Linux驱动开发基础知识学习笔记 文章中大多内容来 ...
- 【嵌入式Linux】嵌入式Linux驱动开发基础知识之LED驱动框架--面向对象、分层设计思想
文章目录 前言 1.LED驱动程序框架 1.1.对于LED驱动,我们想要什么样的接口? 1.2.LED驱动要怎么写,才能支持多个板子?分层写 1.3.程序分析 驱动程序 应用程序 Makefile 1 ...
- 一文看懂 DDD(领域驱动设计)、CQRS和Event Souring与分层架构
我最近开始学习领域驱动设计,CQRS和事件溯源. 到目前为止,我主要参与了使用"经典"N层/层架构和关系数据库的项目. 随着项目变得越来越复杂,我注意到这个模型并不总是很好. 不久 ...
- 《系统架构设计》-06-面向领域思想和策略设计
文章目录 1 面向领域思想 1.1 架构设计与领域驱动 1.1.1 领域驱动设计 1.1.2 使用领域驱动设计的条件 1.2 领域驱动设计核心概念 1.2.1 策略维度 1.2.2 技术维度 2. 面 ...
- 领域驱动设计(DDD)-基础思想
一.序言 领域驱动设计是一种解决业务复杂性的设计思想,不是一种标准规则的解决方法.在领域驱动设计理念上,各路大侠的观点也是各有不同,能力有限.欢迎留言讨论. 二.领域驱动设计 DDD是什么 wiki释 ...
- 何时使用领域驱动设计
何时使用领域驱动设计?其实当你的应用程序架构设计是面向业务的时候,你已经开始使用领域驱动设计了.领域驱动设计既不是架构风格(Architecture Style),也不是架构模式(Architectu ...
最新文章
- 【struts2+hibernate+spring项目实战】分页功能的完整的实现(通用分页、基类实现)
- faster-rcnn系列assert (boxes[:, 2] = boxes[:, 0]).all()和loss偶尔为nan的问题
- Linux - chmod
- java中$和 的区别详解_Mybatis之#{}与${}的区别使用详解
- 系统搭建遇到问题3:Ubuntu问题造成网卡名称异常导致Vivado绑定网卡地址的Lic无法正常工作(JESD)...
- iPhone 13系列7款新机已通过EEC认证:或继续9月亮相
- Node.js系列之node.js初探
- Python实现线性反馈移位寄存器实例信息安全导论期中小作业
- 多旋翼无人机构成及其原理详解
- 双显卡笔记本安装Ubuntu系统
- 微信小程序项目创建步骤
- axure中继器求和_Axure学习笔记-中继器
- MySQL 网站上的 GA 是什么意思?
- 重读DRRN(深度递归残差网络)
- 解析器生成器 ANTLR的详细介绍
- 关于显卡PCIE3.0 X16 X8 X4 X1速度的测试
- 《共轭梯度法》读书笔记(一)——最速下降法
- 微信小程序 加减控件
- 淘宝直通车推广的两种方法看你适合哪一种?
- pocket英语语法崔荣容笔记
热门文章
- Failed to introspect Class from LaunchedURLClassLoader
- flask中flash(闪现)的使用
- 从Mac远程控制Windows
- CCF-201809-3
- linux输入法怎么关闭,关于Ubuntu 7.10的缺省输入法Xim
- 网线直接插电脑能上网 接路由器就连不上了
- pandas之数据文件导入和导出(python读取.csv,.txt,excel文件(.xlsx)以及导出为.csv、excel文件)
- 使用GROUP BY分组
- 申请python原因_为什么很多人喜欢 Python?
- Github / Gitlab Actions 中的 cron 格式 和设置方法