软件是怎样控制硬件的?

我觉得你是想问,软件是怎么控制一个设备,如机器人、数控机床,让它们执行设定的动作的。不论怎么变化,软件控制硬件,都离不开计算机的中央处理器CPU,或者单片机MPU。因为只有处理器才能把控制软件的指令,传递到接口电路,最终控制目标设备的动作。

以下介绍几种我用过的控制方式。

通过I/O口进行控制

CPU有GPIO接口,MPU有P0~P4及更多的IO接口。这些接口,可以通过软件设置,做为输出、输入口。

从CPU,MPU出来的控制信号,一般不能直接控制目标对象,比如最简单的LED灯,电机等,必须经过一些锁存芯片、光电隔离芯片、继电器、接触器、信号驱动等电路,才能控制目标的动作。一些成熟的电机驱动器,也可直接接收从处理器出来的输出信号,只要用一些芯片进行信号转换即可。

通过内存扩展地址,用可编程芯片如PLC,CPLD,FPGA等对目标进行控制。

有的控制对象需要几十、几百个控制点,这样P口就不够用了。

解决的方法,就是用扩展外部存储器地址的方法,如使用E200H,E300H……这样的扩展地址线,通过PLC、CPLD、FPGA等可编程器件,可以扩展出需要数量的控制输出。

很多硬件从业者,很擅长用PLC、CPLD、FPGA等芯片,以至于单片机最直接的P口被束之高阁,只完成看门狗Watchdog最简单的监视作用。

通过CAN,EtherCAT,ISA,PCIE等总线接口传递控制指令

随着外部控制器件的日益智能化、处理器化,各种总线应运而生。

如上位机为高速的PC机,下位机为控制各种动作的单片机,那么PC104的ISA总线接口、PCIE接口、CAN总线接口等,就是最好的选择。或者下位机直接就是一个支持EtherCAT总线的电机驱动器。

通过这些总线接口,可以快速地传递上位机的控制信号到控制单元中。

总结:软件对硬件的控制,有很多种实现方式,IO直接控制;扩展地址外加PLC,CPLD,FPGA可编程芯片控制;CAN,EtherCAT,ISA,PCIE等总线接口控制方式。根据需要,灵活运用。

我们国家自动控制的实力还是很历害的,控制系统也是非常可靠智能的,相信你的所有想法都会通过控制系统变为现实。

(以上图片来自网络,仅为示意)

很高兴能够看到和回答这个问题!

软件和硬件在电路中的本质和作用

软件也是过程中的一个实体。软件的本质是电信号、中低压和不同的数据。这些电流信号控制着逻辑电路的关断,通过关闭逻辑电路来控制硬件的工作。归根结底,软件起到的是开关信号的作用,当开关工作时,要保证设备带电而不开机,硬件是不能被软件控制的。就像一个灯泡如果不接电源,按下开关就不会亮。任何软件都必须通过物理方式转换成电流信号,你写在纸上的软件永远无法控制硬件。以我们每天使用的电脑为例,软硬件工作原理图如下图所示:

以前,我们使用的是软盘,硬盘通过磁头将程序码转换成电信信号,光盘需要光头将程序码转换成电信码,等等。

在指令存储器中发送信息时,计算机存储器中的软件会显示出电流和电流的变化情况。在软件中,电压和高度的存在可以理解为1和0,0和1的各种组合相当于实现控制硬件目标的新指令。一个简单的电路甚至需要多个电流。硬件控制功能,软件是复杂的,可以理解为复杂的电信号。

软件是怎样控制硬件的?

当处理器准备好后,处理器中的指令寄存器会从存储器中检索指令,执行指令后,会对指令进行解码,查看命令、计划工作、设备等需要什么。然后,控制器就可以根据计划的订单,开始所有参与生产的设备的工作。在调试过程中,数据寄存器会将处理后的数据从存储器中输出,并传送到算术逻辑单元。算术逻辑单元包括累加寄存器和程序状态寄存器。积累寄存器相当于草稿墨水。运行过程中的一些数据和结果会暂时存放在这个位置,程序状态寄存器专门负责记录运行过程中是否有传输、溢出等信息。从内存中检索结果并保存到硬盘后的点击数。

上图是软件,也就是客户端访问硬件时候的过程图。可以帮助我们很好地理解软件控制硬件的原理。

如何理解通俗理解软件控制硬件的过程?

软件是指为实现特定目的而具有特定逻辑功能的可执行代码,通常以符号字母或特殊图形框等包装形式出现。但这些设备无法识别。控制硬件是指由各种驱动控制器(如变频器、服务器、屏幕驱动器、单片机、工业可编程自动控制器等)控制的执行器,它可以根据提供的命令直接控制软件……

在存储器和硬盘之间进行数据传输,并将采集到的二进制代码写入存储器中。存储器读取存储的数据,即通过不同的磁化方向,将0和1转换成不同高度、不同电压的电信号,然后处理器通过数据总线搜索存储器,找到存储器中的数据。要执行的指令,再将相应的指令发送给处理器,同时执行指令,输出的结果也是与高度相连的电压信号。

最后,通过驱动器开辟的接口,将指令结果传送给硬件控制芯片,对机器进行控制。硬件控制芯片事先切入控制指令集,然后通过指令集分析进入控制器的纵横电压信号的顺序。只要命令结果与控制命令一致,就会采取相应的措施。

答案写到这里,我想您应该明白了软件是怎样控制硬件的原理。软件就是一串串代码,将相应的代码转变为特定的计算机硬件可以识别的信息后,硬件就可以正常工作了。

以上便是我的一些见解和回答,可能不能如您所愿,但我真心希望能够对您有所帮助!不清楚的地方您还可以关注我的头条号“每日精彩科技”我将竭尽所知帮助您!

码字不易,感觉写的还行的话,还请点个赞哦!

软件是怎样控制硬件的?

★当你往计算机设备里看时,能看到一大推电路、芯片、电线,扬声器、接口和其他东西,这些都是硬件,你看不见摸不着的就是软件。

软件是计算机上所有的程序,或运行在机器上的代码。软件可以是任何形式,从应用程序和游戏到网页,以及在网站上给客户行为的数据科学软件。

但是软件和硬件是如何结合起来起作用的呢?让我们从计算机的中央处理器,即CPU开始说起。CPU是控制计算机其他部分的主芯片,CPU需要做不同的事情,因此它内部有很多小的电路来处理特定的任务,它有电路来做简单的数学和逻辑计算。其他电路用来从计算机的不同部分发送和接收信息。CPU最神奇之处在于它知道使用哪个电路,什么时候用。

CPU会接收简单的命令来告诉它用哪个电路来执行特定的任务。例如,一个“加”的命令告诉CPU用外部电路来计算新数字,然后用“存储”命令告诉计算机用不同的电路来将结果存到存储器中。和数字一样,所有的这些简单的命令都用二进制的1和0表示,或者ON/OFF的电路信号。

二进制命令存在存储器中,CPU将它一条条的取出来执行。实际上,这一系列的命令就是一个非常简单的计算机程序。

二进制代码是软件的基本形式,它控制了计算机上的所有硬件。现在没有人用二进制写程序了,因为这样太慢了。现在程序员写的软件更像是PYTHON或这样RUBY,甚至是这样BLOCKLY。像这样的编程语言,用非常像英语的方法来输入命令。只需要一条命令就能在屏幕上画一个正方形。这条高级命令会被转换为成百上千CPU能理解的简单二进制命令。

软件告诉硬件CPU做什么,当你听音乐时,又浏览网页,并和朋友聊天,你的计算机会同时运行多个软件。那么这些程序是如何到计算机上,CPU又如何一起运行它们的呢?为了寻找答案,我们要看一看操作系统。

操作系统是计算机的主程序,它负责管理软件如何使用硬件、管理软件资源使计算机有效地利用这些资源的程序集合。操作系统的任务是:管理处理器、管理存储器、管理设备、管理文件和管理最终输出作业。例如大多数人个人计算机的Windows操作系统。

操作系统是一种能控制计算机上其他软件的特殊应用程序。它让你能通过将程序读取到内存中来安装新程序。它决定了什么时候程序运行在CPU上,程序是否能操作输入和输出设备。你可能认为计算机在同时运行多个程序,实际上并非如此,操作系统能在一秒钟内非常快速的切换程序好多次,从而共享CPU。

知足常乐2021.9.7日

哈哈,我也被这个问题困扰了很久。

其实从本质上来说并没有软件去控制硬件,而是硬件自己的循环控制。简单来说就是你在键盘上按一下按键,产生高低电压(简单的就是这么说了,当然还有一堆的编码什么的),然后这个电压被存储在ROM(只读寄存器)。然后处理器加载存储的这个高低电压,执行工作。想象一下,如果cpu只是一个n-mosfet,当g极读取到高电压时,产生一个大于阈值电压的vgs,那么ds导通,就可以控制一个灯亮,当读取到低电压灯就灭。当然处理器的处理能力远远不止于此,所以就产生了软件这个概念,让我们可以输入更复杂的控制内容。请记住你看到的在电脑屏幕上密密麻麻的字母并不是软件,而是一段助记符,真正的软件是你在按下键盘的时候产生的高低电压。

处理器最基本的是架构,比如酷睿,奔腾,这个就是架构,如果把一个处理器比喻为一个工厂,那么这个架构就是工厂的整体框架,几个进料口(单核,双核,四核等等),仓库有多大,取料的方式等等。然后到指令集,这个是由一堆门电路硬件构成的最小功能执行单元,也是所谓的软件和硬件的接口,目前分为复杂指令集CISC和精简指令集RISC。x86就是CISC,ARM就是RISC。正因为这是软件和硬件的接口,导致了同一套系统Windows不能同时在两个指令集平台运行。Intel 和AMD虽然架构不同,但是指令集是兼容的,所以我们安装Windows的时候基本是同一套。关于指令集,在微机原理里面有介绍。

好了因为指令集是软件和硬件的接口,软件的编程就必须按照这个接口规范来编写了。当然现在的高级语言编程并不用知道这些,你只要关心编程的语法和你的逻辑就可以,因为编译器已经帮你做好了这个工作,一系列的编译,汇编,链接之后,你就获得了一个包含01的可执行文件,在存储里面就是表现为高低电压。然后这段高低电压送入处理器,经过处理器后就输出你想要的结果,达到软件控制硬件的目的。

请记住,本质并没有软件控制硬件,你是不能用意念控制一个东西一个道理,而是硬件控制硬件。软件是为了高效的输入你的控制指令而发展起来的一套系统化的东西。

软件是控制不了硬件的 但是给软件留了一个调用硬件功能的接口代码 软件代码最终都是转成了硬件设定的机器功能码 软件与硬件的隔离层就是一个编译器 软件要通过编译器告诉硬件告诉CPU它想做什么 电脑 尤其是我们当下使用的电脑就是一堆 开关 一堆的功能开关 开关的核心则是加法器 就是所谓的逻辑门电路 所有计算机功能的实现 都是由门实现的 这个门有三种基本的连接方法 中联 并联 和反接 当开关被晶体管替代时 就实现了大规模的功能实现 代码的分类是在寄存器里 代码的数据到了加法器里要进行一次识别转换 经过识别转换之后通过总线发到相应的硬件进行命令的执行 每一代新的处理器最核心的就是内部的门电路的代码 这些代码是处理器的灵魂 也是CPU厂家的绝对商业机密 如果你的老师或者是师傅教你多少处理器的核心代码 你就有多少把控计算机的能力

软件代码编译后文件保存的内容都是由二进制0和1组成的

  • 在机械硬盘中,这些0和1用磁性材料保存,磁化方向不同分别表示0和1

硬件控制的是电信号,在电路中用电压的高低来表示1和0 。

  • 比如大于3.5伏的电压表示数字1,小于0.3伏的电压表示数字0。

然后将电信号的0和1与存储器中存储的0和1进行耦合,使其可以相互转化。

首先,内存与硬盘进行数据传输,将编译好的二进制代码存入内存

内存读取这些存储数据,就是通过不同的磁化方向将0和1转化成电压高低不同的电信号传入内存中

然后CPU通过数据总线对内存寻址,找出需要执行的指令,然后将该指令对应的高低电压信号传入CPU中,并执行指令,输出的结果也是一串高低电压的电信号

最后通过驱动程序暴露的接口将指令结果传输给硬件的控制芯片,对硬件进行控制。硬件的控制芯片中已经提前刻入了控制指令集,然后指令集对控制器传入的一串高低电压信号进行分析,只要指令结果跟控制指令一致,则完成相应动作。

计算机系统有个基本的原理,很多人没有听说过或者不理解,那就是软硬件等效原理,即:计算机硬件和软件在逻辑功能上是等效的,一个逻辑功能既可以用硬件实现,也可以用软件实现。所谓用硬件实现就是利用各种逻辑电路来完成相关的逻辑功能,软件实现则是利用硬件的基本功能提供的指令编码编程实现的。由于用硬件实现一个逻辑功能非常困难,所以,人们一般将要求速度快的、相对固定的、简单的功能用逻辑电路来实现(具体为集成电路芯片等元器件),如CPU中的ALU(算数逻辑单元),一般也就是实现加法功能和逻辑运算功能,其他的复杂的功能都由软件来实现,在这个前提下,硬件实现就相对简单,部分实现了自动化生产(摩尔定律),而软件设计随着人类对计算机功能的需求不断扩大而愈来愈困难(软件危机),也促使软件产业也更加蓬勃发展(造就了比尔盖茨二十多年的首富)。 这样一来计算机系统的软硬件的关系就好理解了,硬件提供基础的功能,其他功能的扩充则由软件来实现,首次功能的扩充是由系统软件来实现的,操作系统是典型的代表,其次是相关的支撑软件,如语言处理软件等,再就是各种应用软件,包括人工智能软件等。

用钢琴的例子很好理解计算机软硬件的关系,略知乐理(以简谱为例)的人都知道,钢琴的基本发音为1234567,这就相当于计算机硬件只有这7个基本功能,每个基本分发音功能都赋予了一个数字编码,简谱中的数字1234567相当于七个基本指令(什么是指令,指令:CPU基本功能的二进制编码,很多教科书都在回避指令的定义,大家可以查查),显然这七个音单独的弹奏没有什么好听的,只有作曲家利用七个基本的音组合起来写成乐曲,演奏起来就说美妙动听的音乐了,钢琴的功能就得到扩充了。因此,作曲就类似计算机的程序设计(用机器语言进行的编程)!

还有就是计算机作为一个计算工具,其理论接触来自于数学,把其制造为具体的计算工具则由物理学科来实现,比如为什么计算机使用二进制,原因之一就是找到能表示两种稳定状态的物理材料(器件)较容易,这样就可以表示0和1,如,磁性材料、开关电路、电容等!

我觉得大家都很专业,我不专业的说说只求形象,不喜勿喷。

好比有四个层面,一盏灯,一个开关,你和你妈。

你妈说儿子开灯,这时候你妈就是人机交互中的人,

你理解了你妈的意思,用手摁了开关,置于开的状态,你就是人机界面,或者叫软件吧,

开关完成了一个很简单的开和关的逻辑,结果是把断开的电路接上了,形成通路,灯有了能源。开关就是逻辑电路的重要一环。

最后灯得到了能源,实现了它预设的功能,换成电机也是一个道理。其实你根本不用关心灯或者其他什么,是怎么工作的,它干它的。开关才是你要关心的。

有人就骂了,那个摁的动作才是我想问的,机器又没手!要知道很多不用人力就可以驱动开关的元器件很多很多:比如楼梯间开关就有光控,声控,红外线等等。这些都可以产生摁的动作。

而硬盘,磁带或者内存,寄存器中记录的各种高或者低,1或者0的指令,他们本身就是高低电位,都可以代表你妈,不断下发命令,各个层面的硬件就把这些指令通过电流或者电压,像传话筒一样,或者像多米诺骨牌一样,通过层层转达,变成各种形态的信号,或者说类似摁的动作,最后传到开关这个层面。

这里的硬件应该是指以数字电路组成的计算设备,而数字电路是由逻辑门电路组成的,逻辑门的一种实现具体可以参见高教版的数字电路,这些逻辑(与、或、非、异或等)门是实现各种逻辑操作的基石,也就是计算设备中的指令,这些指令由计算设备的外部或内部引脚提供输入,然后依然通过类似引脚提供输出。而处理器一般都是由晶振来驱动。

软件就是一系列指令和数据的集合。

很多人说一条汇编对应一条机器指令,这是不对的,因为汇编中有伪指令。如果想了解软件执行流程,学习汇编是绝佳的手段。

我尽量通俗的解释软件的执行流程。

我们以过去的的操作系统为例,软件启动时,将软件的执行体映射到固定的内存地址(出于安全原因,现在该地址是动态的),将指令指针寄存器(CPU总是从该寄存器读取下一条指令执行)入栈(即保存),并将其跳转到该软件的代码段开始执行(以前是靠段地址+偏移地址进行寻址的),段就相当于一个大窗口上的小窗口,段地址就是小窗口的起始地址,CPU不允许同时操作整块物理内存(现代操作系统不允许操作段寄存器,软件看到的始终是虚拟内存),至此,我们的程序就愉快的开始执行了,直到执行完毕,指令指针出栈(即恢复),相当于又将操作流程归还给了操作系统,因为以前的软件是独占整个计算机资源,软件执行时,操作系统此时就被挂起了,应用软件很容易就造成操作系统崩溃,比如将指令指针悄悄的改上一改。

这就是软件执行的全过程了。请多多点赞

众所周知,计算只能识别二进制,任何程序或软件,最终都要经过编译或解释转换成二进制才能被计算机识别。源代码,源代码就是由程序员使用各种编程语言编写的还未经编译或者解释的程序文本,编译或解释能把源代码翻译成等效的二进制代码,也就是CPU能够识别的机器语言。

编译和解释

编译和解释都是对源代码的解释处理方式,而由于他们的操作方法不同,所以会有不同的运行的效果:

  • 编译是把源代码的每一条语句都编译成机器语言,并最终生成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,在运行时会有很好的性能;
  • 解释器是只有在执行到对应的语句时才会将源代码一行一行的解释成机器语言,给计算机来执行,所以使用解释器来执行的语言也被称为动态语言;

hex文件

在单片机中,源代码经过编译之后生成hex文件,该文件以行为单位每行以冒号开头内容全部为16进制代码。那为啥是十六进制而不是二进制,为什么不直接生成二进制代码?

16进制代码它的每一个字节都有其特定的含义,比如数据长度、起始地址、数据类型等信息。所以在编译的时候就能检验代码是否有错误,能够在一定程度上降低错误率,为代码的传输存储带来便利,而二进制代码却没有这个功能;

并且hex代码通过程序烧写就能转换成CPU就能识别的二进制代码。

但是无论是编译或者解释,最终的结果都是二进制代码,在CPU看来,二进制代码就是一组特定的高低电平的组合;这些高低电平最终去给内存条中相应的一个个电容充电。

那么CPU如何执行二进制的代码呢?

CPU是有工程师精心设计的,我们可以把CPU看作是海量的开关组合,这个开关由三极管组成,三极管/场效应管类似继电器(一种通过线圈产生磁场、然后用磁场控制物理开关的通断与否的设备);在它一个管脚上输入/切断电压信号,另一个管脚就会出现高/低电平;

ps:继电器是一种利用电磁铁控制的开关;当向电磁铁通电时就产生磁场,而这个磁场就会吸合或者分离开关,从而实现“以微弱电流控制另一条电路的通断”这个功能。

三极管拿来当开关使用时,和这种继电器效果几乎一样。

人类的第一台万用型计算机马克一号就拥有3000多支继电器,这也是它的核心零部件,所以它也被称作为继电器,继电器在这台计算机中的作用就是开关。

现代的计算机中使用了三极管来代替继电器的原理也是一样的,CPU中有规模庞大的开关组,当给开关组输入一组特定的高低电瓶组合时,就会导致其内部出现复杂的开关动作,最终产生另一种高低电瓶的组合作为输出,输出的电平经过放大电路、模数转换电路等变换之后,就可以驱动相应的硬件动作。

未经允许不得转载:创速极风 » 软件是怎样控制硬件的?

搞事情!那些不能说的秘密都在这里   关注公众号:创速极风  

         

赞 (0) 打赏

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏