软件是怎样控制硬件的?

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

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

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

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

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

软件是怎样控制硬件的?

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

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

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

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

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

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

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

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

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




我觉得你是想问,软件是怎么控制一个设备,如机器人、数控机床,让它们执行设定的动作的。不论怎么变化,软件控制硬件,都离不开计算机的中央处理器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等总线接口控制方式。根据需要,灵活运用。

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

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




软件是怎样控制硬件的?

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

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

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

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

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

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

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

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

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

知足常乐2021.9.7日




硬件就是电路,软件和硬件所存储的信息的本质其实就是电路上一些开关的状态,只不过现代计算机的集成电路规模之大使其产生质的转变。

就最简单的举例,家里走廊一盏灯有两个开关,按其中任何一个,无论另一个开关的状态如何,都会改变灯的状态(开的就关,关的就开)。或者说必须两个都是关的,灯才会关,否则就是开的。这就是一个简单的逻辑电路,电脑就是上亿个这种电路的结合体。软件和任何存储的信息就是这些开关的状态,开还是关。

以廊灯的例子来说,硬件的功能是受到物理法则约束的,它的可能性只有开合关。无论你怎么按动开关都不可能造成开灯和关灯以外的状态。电脑也是一个道理,任何被物理法则允许的硬件行为理论上都有可能用软件实现。比如说手机的显示屏理论上可以显示任何画面,闪光灯可以用来发光(到一定的亮度),扬声器可以用来说话等。但是没有软件可以让手机飞起来变成无人机。

软件和信息本身也是没有明确分界线的,现代操作系统因为内存很大所以可以人为划分哪些信息是用来定义逻辑关系,哪些是要用来运算的。几十年前电脑刚发明的时候内存受限制,软件和信息都是混合在一起录入的以节省内存和带宽。现代的划分只是方便人类程序员去理解程序的工作方式。




软件和硬件的关系,我不认为是简单的谁控制谁的问题,而是相互依存的关系。

如果把软件和硬件作为一个整体的话,用人来做一个对比,自认为可以说清这种关系。



软件基本上就是一些人为定义好的逻辑,它是一种思想,就像人的思想一样,所以CPU是人的大脑,而CPU里写的软件就是人脑中的思想。

我们这里说的硬件是一些CPU以外的各种电路,这些电路连接到CPU。有些电路是用来采集外界的信息,比如温度、湿度、电压、电流、光线、图像、声音、气味等等,将这些信息传递给CPU。而有些电路是接收CPU发出的指令,按不同的电路实现不同的功能。比如,发出一个关灯的指令,相应电路接收到该指令后实施关灯的动作。

下面用开灯的过程分别用人和软件硬件来作一个对比:

  • 人: 我在家里看书,太阳落山了,天渐渐变黑,我发现看不清字了,这时我想到要去把灯打开,所以我走到开关边上,伸出手按下开关,这时灯亮了,我又可以继续快乐的看书。
  • 软件硬件: 我家里有一套电灯控制系统,工作原理是,光线检测电路检测到光线变暗了,它发出一个信号告诉CPU光线已经较暗了,CUP收到该信息后,其软件逻辑为需要把灯打开,所以CPU输出开灯的指令,电灯控制电路接到指令后接通电灯的开关,这时灯亮了。

该对比我们可以发现下面的对应关系:

口口木的笔记 2019-2-16




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

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

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

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

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




我认为简单点,计算机软件就是通过接口编程来控制硬件的,而我经常用到的接口有串行通讯口RS232和RS485及网线接口,主要用来采集生产设备的参数到ERP系统里进行记录及数据分析。

但有接口通讯还不够,计算机软件编程的时候还要知道设备的通讯协议,简单点就是硬件定时回传一些标准的字符串,例如我编程采集称的重量时,称会回传如下图的字符串,这个就是硬件的通信协议。

有了通信协议,程序员还要明白协议里的内容字符代表什么意思。

一般地,如果是串口通讯协议,可以用微软操作系统的超级终端查看,但协议的内容代表什么意思就要问硬件供应商了

总结:计算机软件编程控制硬件,每个硬协议千变万化,就算同一类型的硬件设备,因制造商不同,通讯协议也不同。

因此如果硬件制造商能标准化通讯协议,计算机软件编程控制硬件更容易,对制造业的自动化之路具有积极作用。




软件是控制不了硬件的 但是给软件留了一个调用硬件功能的接口代码 软件代码最终都是转成了硬件设定的机器功能码 软件与硬件的隔离层就是一个编译器 软件要通过编译器告诉硬件告诉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总是从该寄存器读取下一条指令执行)入栈(即保存),并将其跳转到该软件的代码段开始执行(以前是靠段地址+偏移地址进行寻址的),段就相当于一个大窗口上的小窗口,段地址就是小窗口的起始地址,CPU不允许同时操作整块物理内存(现代操作系统不允许操作段寄存器,软件看到的始终是虚拟内存),至此,我们的程序就愉快的开始执行了,直到执行完毕,指令指针出栈(即恢复),相当于又将操作流程归还给了操作系统,因为以前的软件是独占整个计算机资源,软件执行时,操作系统此时就被挂起了,应用软件很容易就造成操作系统崩溃,比如将指令指针悄悄的改上一改。

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

展开阅读全文

页面更新:2024-03-17

标签:电信号   硬件   寄存器   软件   指令   电压   处理器   电路   逻辑   信号   接口   命令   代码   计算机   程序   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top