<small id='2Lyaf'></small> <noframes id='0cxuYF'>

  • <tfoot id='gIDuoVmT'></tfoot>

      <legend id='nK0i7BrQwN'><style id='mw24Ff0cJv'><dir id='qbL5ihDO'><q id='xRDZHMt'></q></dir></style></legend>
      <i id='Foh4jH'><tr id='EgIu7Rj6pm'><dt id='5o9sVTL'><q id='RDOn9jb'><span id='RoTj1YcJ'><b id='FTDm'><form id='sgFni'><ins id='B6wJErAm'></ins><ul id='VNsH5OMTB'></ul><sub id='tosPI'></sub></form><legend id='sG5WgEHFd'></legend><bdo id='K2NlDEWikJ'><pre id='tp5y'><center id='AVB3jI'></center></pre></bdo></b><th id='vVkphcCRI'></th></span></q></dt></tr></i><div id='5g2La'><tfoot id='vXrV'></tfoot><dl id='qnmyjUcWPg'><fieldset id='o7uPrAR'></fieldset></dl></div>

          <bdo id='7qrLi'></bdo><ul id='qGILd'></ul>

          1. <li id='fqoiRE'></li>
            登陆

            章鱼彩票 资讯-详解单片机程序的运转进程

            admin 2019-11-18 223人围观 ,发现0个评论

            从单片机上知道,在上电的那一刻,MCU的程序指针PC会被初始化为上电复位时的地址,从哪个地址处读取行将履行的指令,由此程序在MCU上开端履行(当然在调用程序的 main之前,还有一系列其他的的初始化要做,如仓库的初始化,不过这些咱们很少回去修正)。PC在上电时,和MCU差不多,不过读取的是BIOS,有它完结了许多初始化操作,最终,调用体系的初始化函数,将控制权交给了操作体系,所以咱们看到章鱼彩票 资讯-详解单片机程序的运转进程了Windows,Linux体系发动了。

            假如将操作体系看作是在处理器上跑的一个很大的裸机程序(便是直接在硬件上跑的程序,由于操作体系便是直接跑在CPU上的,这样看待是能够的,不过这个裸机程序功用许巫启贤多,很强壮),那么操作体系的发动很像MCU程序的发动。前者有一个很大的初始化程序完结很杂乱的初始化,后者有一段不长的汇编代码完结一些简略的初始化。这一点看,它们在流程上是很类似的。


            详解单片章鱼彩票 资讯-详解单片机程序的运转进程机程序的运转进程

            假如是体系上的程序发动呢?它们是由体系来决议的。Linux上在shell下输入。/p后,首要查看是否是一个内建的shell指令;假如不是,则shell假定他是一个可履行文件(Linux上一般是elf格局),然后调用一些相关的函数,将在硬盘上的p文件的内容拷贝到内存(DDR RAM)中,并树立一个它的运转环境(当然这儿边还有内存映射,虚拟内存,衔接与加载,等一些其他东西),预备履行。

            由以上可知,单片机上的程序和平常在体系上运转的程序,在发动时差异是很大的(假如将程序调用main曾经的动作,都笼统为初始化的话,程序的发动能够简化为:树立运转环境+调用main函数,这样程序的履行差异是不大的)。由于单片机上跑的程序(裸机程序),是和操作体系相同跑在硬件上的,它们归于一个层次的。曩昔之所以没有区分出单片机上的程序和PC机上的程序的一些差异,便是没有弄了解这一点。

            由此,曾经的一些疑问也就解开了。为什么在单片机上的程序不怎么运用malloc,而PC上常常运用?由于单片机上没有现已写好的内存办理算法的代码,而在PC上操作体系里运转的程序,libc现已把这些都做了,只需要调用就能够了。假如在单片机上想用动态内存,也能够,可是这些代码要自己去完成,并界说一个相应的malloc,有时分一些公司会给供给一些库函数或许会完成malloc,可是由于单片机上RAM内存非常有限,假如不知道它的运转方法,估计会很风险。相同,由于在PC的体系上运转的程序与逻机程序的不同,裸机程序不会有动态链接,有的仅仅静态链接。

            关于程序在履行时,从哪里读取指令,哪里读取数据,章鱼彩票 资讯-详解单片机程序的运转进程也曾由于没有弄清楚体系上的程序和裸机程序之间的差异,而疑问了好久。虽然在《微型计算机原理》课上知道程序运转时,从内存中读取指令和数据进行履行和回写。可是单片机上只需几K的RAM,而flash一般有几十K乃至1M,这个时分指令和数据都在内存中吗(这儿指的内存仅指RAM,由于PC上咱们常说的内存便是DDR RAM memory,先入为主以至于以为单片机上也是这样,还没有了解其实RAM和Flash都是内存)?这不或许,由于课上教师只说内存,可是PC上内存一般便是DDR RAM,不会是硬盘,硬盘是保存数据的当地;由此类比时,自己把自己弄晕菜了,单片机的RAM对应于DDR RAM,那Flash是不是就对应于硬盘了呢?在CSAPP上了解了,PC上之所以都在DDR RAM上,是速度的要素。

            硬盘的速度太慢,即使是行将到来的SSD比起DDRRAM,仍是差着几个数量级,所以拷贝到DDRRAM中。这时,一个程序的代码和数据是接连寄存的,其间代码段是只读区域,数据段是可读写区域(这是由操作体系的内存办理机制决议的)。运转时,再将它们拷贝到速度更快的SRAM中,以得到更快的履行速度。而关于,单片机而言作业频率也就几M,几十M,从Flash中与从RAM中读的差异或许并不显着,不会成为程序履行的瓶颈(而关于PC而言,Flash的速度太慢,DDRRAM的速度也是很慢,即使是SRAM也是慢了不少,所以再进步作业频率也进步不了程序的履行速度,所以现在CPU作业频率最快是在2003左右。一个瓶颈呈现了。

            为了进步CPU的运用率,换个视点想一下,已然不能削减一段程序的履行时刻,就在相同的时刻履行更多的程序,一个核履行一段程序,两个核就能够履行两段程序,所以多核CPU成为了现在的干流)。所以裸机程序指令就在Flash(Flash memory)中寄存,而数据就放在了RAM中(flash的写入次数有约束,一起它的速章鱼彩票 资讯-详解单片机程序的运转进程度和RAM仍是差许多)。更广泛说,在单片机上RAM寄存data段,bss段,仓库段;ROM(EPROM,EEPROM,Flash等非易失性存储设备)寄存代码,只读数据段。实质上说,这和PC上程序都在RAM中寄存是相同的,PC 上是操作体系规则了可读与可写,而单片机上是依托不同的存储设备区分了可读与可写(当然现在的Flash是可读写的,假如Flash没有写入次数约束,速度又能够和RAM相差不多,单片机上是不是只需Flash就能够了呢(直接相当于PC上的DDRRAM)?这样本钱也会比一个RAM,一个Flash低,更节约本钱,关于生产商更合算)。

            关于单片机的程序履行时指令和数据的寄存与读取,了解如下:

            对单片机编程后,程序的代码段,data段,bss段,rodata段等都寄存在Flash中。当单片机上电后,初始化汇编代码将data段,bss段,复制到RAM中,并树立好仓库,开端调用程序的main函数。今后,便有了程序存储器,和数据存储器之分,运转时从Flash(即指令存储器,代码存储器)中读取指令 ,从RAM中读取与写入数据。RA章鱼彩票 资讯-详解单片机程序的运转进程M存在的含义就在于速度更快。

            无论是单片机也好,PC也罢,存在的存储器金字塔都是共同的,速度的要素,本钱的约束导致了一级级更快的存储器的更快速度与更高的本章鱼彩票 资讯-详解单片机程序的运转进程钱。应该说,关于它们的了解,便是存储器金字塔的了解。

            请关注微信公众号
            微信二维码
            不容错过
            Powered By Z-BlogPHP