电脑的外部设备

设备管理

(1)回顾计算机结构
图:

(2)常见的外部设备

1)如何判定是不是外部设备
只要挂接在外设IO接口上的都是外部设备,与所在位置关系不大,可能在芯片内部、也可能在芯片外部,可能在机壳内部,也可能在机壳外部。

2)外部设备大致分为三类
按照用途分的话,大致分为三大类。
(a)数据的传输:比如网卡,负责数据的发送和接收,即是输入也是输出设备
(b)数据的存储:比如像磁盘,SSD(固态硬盘),负责数据的存储,既能读数据也能里写数据,所以即是输入也是输出设备。
c)数据的翻译:比如输入设备MIC,将输入的声音翻译为电信号的二进制数据。比如显示器,将电信号的二进制数据翻译为人看得见的图像和视频。
不管是哪一类的设备,要么是输入设备,要么是输出设备,要么是即使输入也是输出设备。

3)输入输出设备
(a)输入设备
·键盘:字符图形输入,按下某个按键,输入动作会被翻译为ASCII编号数据(以电信号的二进制数形式存在)。
·鼠标:光标位置输入,将鼠标移动转为电信号二进制的坐标数据
·摄像头:图形图像输入,将其翻译为电信号二进制数据
·麦克风:声音输入,将其翻译为电信号二进制数据
·触摸屏:将触摸位置翻译为电信号二进制坐标数据
·网卡:直接接受别的计算机发送的电信号二进制数据,输入给计算机
·磁盘、SSD:读取存储的数据,输入给计算机
(b)输出设备
·显示器:将CPU按照程序要求处理后的,电信号的二进制的图形、图像数据,翻译成为图形图像给人看
·喇叭:将声数据翻译成为人能听得见的声音
·打印机:将数据输出到打印机打印,打印机打印
·机械手臂:将输出数据翻译成为机械手臂的动作
·Led灯等:将输出数据翻译成为灯的亮灭
·网卡:从计算机输出数据,传输给别的计算机
·磁盘、SSD:从计算机输出数据,写到磁盘或者SSD中

4)有关外部设备
(a)外部设备非常多,根据不同的用途有不同外部设备,如果你是做纯软件开发的,了解即可,如果你是做嵌入式开发的,
需要掌握一些常见的设备开发,但是不需要掌握所有,没有意义,有了常见设备的开发经验后,根据工作需求掌握其它设备。
(b)对于嵌入式开发来说,重点不在于研究外部设备制造和工艺,比如研究显示器是怎们被制造出来,显示器实现图像现实的详细技术知怎样的,这些是设备生产者关心的事,嵌入式开发者要做的了解设备的基本工作原理,能够查阅设备手册,编写相关的驱动程序,控制外部设备工作。
b)嵌入式技术
单片机、Linux嵌入式中,会有各种常见守备队的驱动课程,驱动课程的目的就是讲解如何开发出驱动程序,驱动这些外部设备工作。

设备驱动程序

1)为什么叫要驱动程序
外部设备绝对不是连上就能用的,必须要有专门的程序来驱动才能工作,能够驱动外部设备工作的程序就是驱动程序。
图:

驱动程序是属于内核的一部分。

2)驱动程序到底是如何驱动外部设备
为了能够驱动外部设备工作,驱动程序关键要要两件事情,
第一件:配置外设的工作模式
第二件:通过外设输入输出数据
(a)第一件:配置外部设备的工作模式
·为什么要配置
因为大多数外部设备都有很多种工作模式,驱动程序需要通过相应的配置,选择让设备工作在那种工作模式下,如果不做配置的话,外部设备不知道该工作在什么模式下,是混乱的。
驱动程序是如何配置外部设备的呢?
通过相应的配置开关进行配置,这个配置开关就是“设备的配置寄存器”。
· 设备的配置寄存器
就是外设工作模式的配置开关,是外设专用寄存器,与CPU内部的寄存器、cache、内存(DDR)一样,只是这些寄存器被做在了外部设备的内部,是专属于外设的专用小容量内存,驱动程序向设备的配置寄存器中写入相应的
配置数据,就可以配置好外部设备的工作模式。
·为什么向配置寄存器写入配置数据,就能配置好外设的工作模式
图:

计算机中数据已电信号存在,向设备配置寄存器写入配置数据,其实就是将电信号导入配置寄存器,配置寄存器中就把这个电信号锁存起来,这个电信号承载的是一个二进制数,所以就将电信号的二进制数据写入了配置寄存器中。
(b)第二件:输入/输出数据
配置好工作模式后,驱动程序就可以驱动设备工作了,此时需要用外设的“数据寄存器”。
为什么需要数据寄存器呢?
因为输入输出数据时,数据需要暂时存放在数据寄存器中,存数据时,存储的其实就是电信号。
·输入设备
输入设备有两种情况,
第一种:直接得到就是二进制数据,比如像网卡和存储器,能够直接输入数据
第二种:需要经过传感器的翻译,比如像麦克风、摄像头,需要利用传感器将外部输入的声光等其它信号形式的数据,转为二进制电信号形式的数据。
CPU执行输入设备驱动程序时,从输入设备的数据寄存器中取出数据,并将数据保存起来,专门进行数据处理的程序就可以处理这些输入的数据了。
图:

·输出设备
输出设备也有两种情况,
第一种:直接将二进制数据输出给其它设备,比如网卡就是这样的
第二种:需要将数据翻译为其它信号形式的数据,比如显示器需要将二进制电信号的视频数据,翻译为光信号的图像数据,供人识别。
CPU执行输出设备的驱动程序时,会将电信号形式的数据写到设备的数据寄存器中,输出设备的
图:

·输入输出设备
有些外部设备既是输入设备也是输出设备,那就是上述的综合情况。

驱动程序的种类

stm32 51
分为两种,第一种是裸机驱动程序,第二种是基于OS的驱动程序。
1)裸机驱动程序
(a)裸机驱动程序的特点
· 裸机程序大致分为两部分,第一部分为业务逻辑代码,第二部分为驱动代码,

  • 业务逻辑代码:专门负责数据的处理,比如计算1+2结果
  • 驱动代码:专门负责驱动外设,实现数据的输入输出,比如控制键盘输入1和2,控制显示屏显示3
    ·裸机程序结构图示
    图:

地址:
程序使用地址有两种形式,
第一种:间接使用
int a;//a一般是4个字节,每个字节都有一个地址,不过只有变量的第一个字节的地址,才作为整个变量的地址
a = 10;//a->地址,编译器会将变量名和地址联系起来,0x2342
但是使用变量名操作时,虽然还是使用的是地址来操作的,但是变量名操作会受到限制
void fun(void)
{
int a;//a->地址
}
在Java里面全部使用变量名这种形式,也就是间接使用地址的形式,所有的高级语言都有变量这个东西,使用变量名时,其实间接使用的是地址,那么这个变量名到底和什么地址对应起来的,这个就看编译器在编译的时候,怎么对应。
有些高级为了减少直接使用地址带来的危险,都不在直接使用地址操作,而是使用变量操作。
第二种:直接使用
int a;//a->地址
int *p = &a;//编译器在编译时,会直接使用地址将&替换
int *p = 0x325234;
那么我们在底层的驱动程序中,一般来说都是用C语言来开发,在c语言的驱动程序中,访问内存空间,以及寄存器空间时,基本都是以上这两种,直接使用地址操作的形式,来访问对应的空间。
如果说你的底层驱动程序是使用java来开发的话,java的语法特性是不允许你直接使用地址操作,但是在底层驱动里面,特别是访问寄存器空间时,我们非常需要直接使用地址操作,因为设备手册上,直接给你的就是寄存器地址,那么你只能直接使用地址操作,java没办法直接使用地址操作,所以说底层驱动程序基本不会使用java来编写。
那么那些情况下会直接开裸机驱动程序呢?
一般情况下,开发计算机资源有限的单片机产品时,都会直接开发裸机驱动程序,我们开发单片机程序时,程序里面既包含业务逻辑代码,同时也包含驱动程序代码,当然可能是有一个人完成的,也可能由不同人完成。
(b)基于OS的驱动程序
图:

(c)以上两种驱动程序的对比
· 不同点:
· 相同点:裸机驱动和基于OS的驱动,它们所做的事情都是一样的

  • 驱动程序写配置寄存器,设置设备的工作模式
  • 通过读写设备的数据寄存器,实现数据的收发
  • 驱动程序负责的事情
  • 对上与应用程序对接(可能需要OS对接)
  • 对下驱动设备
    但是驱动的工作到设备寄存器(配置、数据)就ok了,至于设备是如何拿到寄存器的数据去工作的,这就是属于设备的自己的工作范畴,驱动程序已经管不着了,这就好比送餐送到手上就好了,难道还要喂你吃吗。
    你觉得写驱动程序的人,他的工作是什么,简单来讲就是通过驱动程序实现以上这两个目的,一个与应用对接,另一个通过寄存器去驱动设备。
    · 应用程序与驱动是否在一起呢
  • 裸机:应用和驱动代码写在了一起。
    在裸机里面,裸机驱动程序与业务逻辑代码合在了一起,开发时,这两部分代码可以由一个人全部开发,又可以分开由不同的人来开发。
  • 基于OS的驱动:
    应用和驱动懂之间完全是分开的,中间通过OS对接。
    应用和驱动是分开被开发的,由不同的两部人来分别开发,做应用的专门做应用,做驱动的专门做驱动。
    · 裸机驱动与基于OS的驱动,谁更难
    总体上来说,基于OS的更难,原因有两方面。
    - 第一方面
    之所以裸机运行程序,大部分原因是因为计算机资源比较弱,不能跑操作系统,比如类似51这类低级别单片机。
    计算机资源较弱,自然控制的设备也比较简单,比如都是一些小电动机,led灯,数码管,小LCD屏等等这类,很简单的设备,控制简单,编写的驱动程序自然也简单。
    但是基于OS的驱动就不一样,既然能够跑OS,也就意味计算机能力很足,所控制的设备自然也就很复杂,比如什么大型的液晶屏、大号的键盘、鼠标、触摸屏、磁盘、网卡等等这类复杂的设备,设备复杂了,对应的驱动程序自然也简单不了。
    - 第二方面
    有操作系统是,驱动程序必须要和OS对接,将驱动加入OS,变成OS的一部分,由OS来管理驱动程序,和OS对接本身就是一件很复杂的事情,如果是裸机的话,就省去了OS这个复杂的因素。
    但是我们说过,不管是那种驱动程序,工作的内容都是一样的,一个对上与应用对接,另一个是对象驱动设备,如果你只是想了解驱动的工作都做些设么事情,学习单片机这种裸机驱动程序的开发就可以了。
    (5)有关驱动程序的开发
    我们这里所讲的驱动,重点指是基于OS的驱动。
    1)驱动开发的行业特点
    有关驱动的开发可以分为两类
    标准化计算机驱动开发,非标准化计算机驱动开发。
    (a)非标准化计算机
    嵌入式计算机就是非标准化计算机,所谓非标注化的意思就是,硬件和软件没有统一标准化的东西,都是要进行定制的,所谓定制的意思就是说,你具体有什么需求,根据你的特殊需求定制硬件和对应软件。
    比如你的是用来控制锅炉的,那我就是专门给你设计符合锅炉环境的设备,如果你的是用于深水探测的,那我就专门定制符合深水环境的设备,相应的设备的硬件和软件需要定制,嵌入式设备的应用环境是千差万的,没办法给出标准化的东西。
    嵌入式开发时典型的非标准计算机开发和设计。
    嵌入式计算机驱动也分两种
    有OS的嵌入式设备驱动开发:开发基于OS的驱动,比如ucos和Linux系统。
    没有OS的嵌入式设备驱动开发:纯粹的单片机裸机程序开发,其中就包含裸机驱动开发。

689-电脑的外部设备驱动程序相关推荐

  1. 打印机驱动程序属于计算机硬件吗,如何安装打印机驱动程序,详细教您如何给电脑安装打印机驱动程序...

    随着科技发展越来越发展,一些产品设备已经逐渐变成生活中,工作上必不可少的一部分,而打印机则是代表之一了.而我们想要使用一台打印机,需要在电脑上安装一个打印机驱动程序,才能让打印机正常工作.那么打印机驱 ...

  2. 显卡服务器已停止响应,Win7电脑提示显卡驱动程序已停止响应并且已恢复如何解决?...

    最近很多用户在反映Win7电脑提示显卡驱动程序已停止响应并且已恢复,这是怎么回事呢?导致这种情况的原因有很多种,那么遇到这种情况该怎么解决呢?其实Win7提示显卡驱动程序已停止响应并且已恢复的解决方法 ...

  3. 在计算机上打印机驱动程序,如何安装打印机驱动程序,小编教你如何给电脑安装打印机驱动程序...

    前几天,有用户问小编什么是打印机驱动?所谓打印机驱动程序是指电脑输出设备打印机的硬件驱动程序.打印机驱动有作用呢?它是安装系统与硬件之间的纽带.只有安装了打印驱动程序,电脑才能和打印机进行连接并打印. ...

  4. 电脑提示计算机缺失程序怎么办,电脑安装扫描仪驱动程序,提示文件丢失怎么办?这样解决...

    原标题:电脑安装扫描仪驱动程序,提示文件丢失怎么办?这样解决 打印机是大家日常接触最多的产品之一,但是我们常常会遇到扫描仪无法扫描的情况出现,遇到这种情况我们应该怎么办呢? 一般我们在安装扫描仪驱动时 ...

  5. 如何计算机网络打印机驱动程序,如何安装打印机驱动程序,教您如何给电脑安装打印机驱动程序...

    打印机,已经成为办公的必要的设备之一了,平时用来打印资料,文件,单据等等,大大的方便了我们的使用,但是很多人的用户对安装打印机驱动程序不太了解,如何操作安装呢?下面,小编就来跟大家解说一下如何给电脑安 ...

  6. 台式计算机软件安装的完整过程,台式win7系统电脑安装网卡驱动程序的详细步骤...

    我们都知道台式win7系统电脑是没办法连接无线上网的,如果想要连接WiFi上网就需要安装网卡驱动程序.如果遇到无线网卡驱动程序不正常了,上不了网了的问题,接下去系统城小编告诉大家台式win7系统电脑安 ...

  7. 怎样用计算机进入手机驱动程序,小米4驱动怎么安装以连接电脑的USB驱动程序...

    经过几轮的销售,很多幸运的朋友都第一时间上手了自己历经"千辛万苦"而抢到的小米4手机,新机上手,定然想到与电脑相连接,以在手机里安装合适应用软件,放置文件.视频.音乐等.而实现这些 ...

  8. 计算机硬件设置和驱动安装,电脑怎么安装驱动程序,如何安装驱动程序

    Q4:电脑显示未能成功安装设备驱动程序,该如何安装? 方法如下: 1.打开驱动精灵点击立即检测 2.检测完后如果你是没有网卡驱动圈中地方就是升级安装. 3.升级安装即可 扩展资料 1.驱动精灵是万能驱 ...

  9. 360服务器已停止响应,Win7电脑提示“显示器驱动程序已停止响应 并且已恢复”解决方法...

    一.重装或升级显卡驱动 1.首先我们去网上下载"驱动精灵",打开驱动精灵软件,弹出的驱动精灵主界面之后,点击"立即检测",如下图所示. 打开今日头条,查看更多图 ...

最新文章

  1. 蹭了BCH热度,还来诋毁BCH,这些跳梁小丑到底在玩什么阴谋?
  2. 近期活动盘点:2019第六届世界互联网大会、面向智慧城市的人本尺度城市形态:理论方法与实践讲座、高级管理人员AI大数据能力研修班...
  3. DPDK vhost库(十一)
  4. 阿里巴巴 Kubernetes 能力再获 CNCF 认可 | 云原生生态周报 Vol. 32
  5. matlab中ismember_MATLAB 代码格式化简易版
  6. idea构建springboot项目右边没有maven_写给新手看的 Spring Boot 入门学习指南
  7. 数据结构栈和队列以及常见算法题
  8. mysql5.7免安版配置_mysql5.7免安装版配置
  9. Canvas学习:封装Canvas绘制基本图形API
  10. 阿里最“短命”P10员工?曝前百度云高管加盟钉钉不足三周被开除
  11. JavaScript获取当前月的第一天和最后一天日期
  12. Spark2 文件处理和jar包执行
  13. python怎样计算增长率_增长率如何计算
  14. jQuery boxy
  15. 修改iphone模拟器hosts
  16. pypy+uwsgi+dango+nginx 简单部署
  17. python中pandas.DataFrame如何对行与列求和以及如何添加新行与列的示例
  18. 【单链表】单链表的就地逆置
  19. MATLAB 数据处理(二)非线性拟合——洛伦兹拟合(Lorentz fit)
  20. 安装LoadRunner时提示“此计算机上缺少 vc2005_sp1_with_atl_fix_redist”的解决方法

热门文章

  1. 基于大疆智图和云端地球,发布OSGB格式三维航拍模型
  2. End-to-end Audio-visual Speech Recognition with Conformers
  3. 哪位老哥熟悉vue fullcalendar的,能帮忙看看为啥addEvent没效果吗
  4. 中文分词的python实现-基于FMM算法
  5. iphone12里的计算机,iPhone12来了!性价比超高的11还值得买吗?
  6. java语言for模板_Java中使用FreeMaker实现模板渲染
  7. 计算机科学类学术论文,计算机科学与技术学院申请博士学位发表学术论文的规定(2008.9上网)...
  8. 数字图像的一阶微分和二阶微分
  9. 5年Java开发月薪43k 谁能想到实习期的我月薪只有2K呢?
  10. 中小互联网软件公司的骗局--前言