您的位置 首页 元件

MCU的内存分配详解

MCU的内存分配详解-其中code和RO-data存储在flash中,所以两者之和为单片机中flash需要分配给它们的空间大小(并且等于代码所生成的.bin文件大小),另外RW-data和ZI-data存储在sram中,同样两者之和为单片机中sram需要分配给它们的空间大小。

谈到内存,咱们都会想到PC,关于单片机或许arm来说也是存在内存的,简略的了解是:内存嘛……便是寄存东西的当地,只不过这个东西是数据罢了,好了,仍是把要点放在mcu上面,关于一款mcu来说,在功能描绘的时分都会告知sram,flash的容量巨细,关于初学者来说,也不会去考虑和理睬这些东西,拿到东西就只用。其实不然,这些量都是十分重要的,细心想想,代码为什么能够运转,代码量是多少,界说的int、short等等类型的变量究竟是怎样分配和存储的,这些问题都和内寸有联系。

首要单片机的内存能够巨细分为ram和rom,这儿就不再解说ram和rom的区别了,咱们能够将其等效为flash和sram,其间依据flash和sram的界说可得,flash里边的数据掉电可保存,sram中的并不能够,可是sram的履行速度要快于flash,能够将单片机的程序分为code(代码存储区)、RO-data(只读数据存储区)、RW-data(读写数据存储区)和ZI-data(零初始化数据区)。在MDK编译器下能够观察到在代码中这4个量的值,如下图1所示:

图1:

其间code和RO-data存储在flash中,所以两者之和为单片机中flash需求分配给它们的空间巨细(而且等于代码所生成的.bin文件巨细),别的RW-data和ZI-data存储在sram中,相同两者之和为单片机中sram需求分配给它们的空间巨细。

别的,咱们必然会想到栈区(stack)、堆区(heap)、大局区(静态区)(staTIc)、文字常量区和程序代码区和上面所介绍的code、RO-data等的联系。

1、栈区(stack):由编译器主动分配开释 ,寄存函数的参数值,局部变量的值等。其操作方法类似于数据结构中的栈。 这些值是可读写的,那么stack应该被包含在RW-data(读写数据存储区),也便是单片机的sram中。

2、堆区(heap):一般由程序员分配开释, 若程序员不开释,程序完毕时或许由OS收回 。能够了解,这些也是被包含在单片机的sram中的。

3、大局区(静态区)(staTIc):大局变量和静态变量的存储是放在一块的,初始化的大局变量和静态变量在一块区域, 未初始化的大局变量和未初始化的静态变量在相邻的另一块区域,程序完毕后由体系开释。这些数据也是可读可写的,和stack、heap相同,被包含在sram中。

4、文字常量区:常量字符串便是放在这儿的。这些数据是只读的,分配在RO-data(只读数据存储区),则被包含在flash中。

5、程序代码区:寄存函数体的二进制代码,能够幻想也是被包含在flash,由于关于MCU来说,当其从头上电,代码还会持续运转,并不会消失,所以存储在flash中。

综上所述,MCU的内存分配根本如此,其间并没有说到存储空间所对应的flash和sram地址,这些后边还会讲到!如有过错,请纠正。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/yuanjian/347089.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部