欢迎进入PCB抄板科技有限公司网站
全国服务热线
020-66**9888
芯片解密
单片机达人解密:指令数据写哪了?
时间: 2020-07-07 22:00 浏览次数:
让咱们从最下手的闭键讲起。正在单片机上电的霎时,MCU的秩序指针PC会被初始化为上电复位时的地方,从哪个地方处读取将要施行的指令,由此秩序正在MCU上下手施行(当然正在移用

  让咱们从最下手的闭键讲起。正在单片机上电的霎时,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中读取与写入数据。RAM存正在的事理就正在于速率更疾。

  无论是单片机也好,PC也罢,存正在的存储器金字塔都是同等的,速率的要素,本钱的节造导致了一级级更疾的存储器的更敏捷率与更高的本钱。应当说,看待它们的阐明,便是存储器金字塔的阐明。

Copyright © PCB抄板科技有限公司 版权所有 粤ICP备14031015号-1
全国服务电话:020-66**9888   传真:020-66**9888
公司地址:广东省广州市番禺经济开发区58号