单片机MCU内存分配


 谈到内存,我们都会想到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中。

(4)单片机在分布式多机系统中的应用在比较复杂的系统中,常采用分布式多机系统。多机系统一般由若干台功能各异的单片机组成,各自完成特定的任务,它们通过串行通信相互联系、协调工作。单片机在这种系统中往往作为一个终端机,安装在系统的某些节点上,对现场信息进行实时的测量和控制。单片机的高可靠性和强抗干扰能力,使它可以置于恶劣环境的前端工作。

2、堆区(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。可以理解,这些也是被包含在单片机的sram中的。

3、全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,程序结束后由系统释放。这些数据也是可读可写的,和stack、heap一样,被包含在sram中。

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

5、程序代码区:存放函数体的二进制代码,可以想象也是被包含在flash,因为对于MCU来说,当其重新上电,代码还会继续运行,并不会消失,所以存储在flash中。

 

   综上所述,MCU的内存分配基本如此,其中并没有提到存储空间所对应的flash和sram地址,这些后面还会讲到!如有错误,请指正。


来源:转自lskybs的空间 

单片机

每天更新
单片机
各种知识,电子制作DIY,及
电子行业
最新资讯,关注我们,棒棒哒!

定时器/计数器有几种工作方式?分别是什么?四种 方式0方式1方式2方式3
定时器/计数器工作在方式0 (M1M0=00)时,为13位计数器。 定时器/计数器工作在方式1 (M1M0=01)时,为16位计数器。
定时器/计数器工作在方式2 (M1M0=10)时,为8位自动恢复初值的计数器。 方式3 (M1M0=11)时,T0为2个独立8位定时/计数器,T1为1个独立定时/计数器,共计3个定时/计数器。但T1不能工作在方式3(TR1=0,停止计数)。

生成海报
点赞 0

Abin

我还没有学会写个人说明!

相关推荐

阿达的红外射频遥控盒子(二)

功能描述 1、这个版本是在阿达的红外射频遥控盒子(一)的基本上修改,增加了USB口自动下载电路,更改了阿达的Q1连线问题,全部贴片原件用0805,USB增加了一个封装,更加

ESP32(IDF)EC11旋转编码器使用总结

一、调试过程中遇到的问题 1.正反转判断方法。 2.旋转一格,输出多个脉冲。 二、硬件 主控:ESP32-S2 EC11旋转编码器 三、电路 接线说明: 1.三脚的一边,中间

MCU行业信息汇总

概述: 1、按照位数来划分,MCU可分为4位、8位、16位、32位和64位微处理器,现在32位MCU已经成为主流,正在逐渐替代过去由8/16位MCU主导的应用和市场。若按照指令集架构(I