谈到内存,我们都会想到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地址,这些后面还会讲到!如有错误,请指正。
关键字:单片机 MCU 内存分配
引用地址:
单片机MCU内存分配
推荐阅读最新更新时间:2024-03-16 13:48
彩色STN模块VP2188与51单片机接口
VP2188是精电蓬远生产的一款彩色STN液晶显示模块,此模块为点阵透射式彩色STN显示屏,色阶为65 k色、白色LED背光,其核心控制器是Philips COG封装的PCF8837.PCF8837是单片式彩色STN控制驱动器,存储容量为176*132*16=45 kB,有3种颜色显示模式(RGB 565或444或332),驱动能力为176行,396列(132*RGB)输出. PCF8837的特点是有内部集成驱动电源功能模块及OPT功能模块,具备内部DC-DC升压、变换及电压、帧频率温度补偿电路,可以通过软件管理驱动电源的工作 ,并有灵活的串口和并口连接方式、矩阵式存储器管理以及由此带来的方便的图像管理功能、区域滚动模式
[单片机]
基于51单片机产生占空比和频率可调的方波信号发生器
前段时间开始接触到单片机,以为单片机会很简单,但比我预想的要复杂一些,特别是刚开始接触的时候,需要下载各种软件,然后自己慢慢地去熟悉这些软件的操作。我是从51单片机开始入手,毕竟51单片机是最基本的了。正好这学期学习了波形的产生,就做一个基本的函数信号发生器吧。 这次实现的函数发生器是基于51单片机的占空比、频率可调的方波发生器,适用于AT89C51/52、STV89C51/52等,现在把具体过程给大家说说。 第1步:安装一个单片机仿真图软件,推荐使用Protues,这是一款专门用来仿真单片机的,功能十分强大。我用的是Protues8.6,下载安装步骤大家就自行查询了,学习起来比较简单,半小时就能掌握了。下面是我
[单片机]
爱特梅尔提供2.4GHz ISM频带应用无线微控制器产品
微控制器及触摸技术解决方案的领导厂商爱特梅尔公司(Atmel® Corporation)发布下一代超低功耗单芯片无线解决方案ATmegaRFR2 AVR®微控制器系列,用于全球范围的2.4GHz工业、科学、医疗 (ISM) 频带应用。 新的产品系列扩展了爱特梅尔现有的ATmega128RFA1 MCU产品,包括带有新的存储器型款的ATmega64RFR2、ATmega128RFR2,以及ATmega256RFR2器件,提供从较小的64K器件至较大的256K器件。 ATmegaRFR2 MCU系列集成了数项业界领先的功能,包括使用高级硬件协助来实现最低功耗,同级最佳RF性能和额外的存储器选项,以期满足现今无线产品的严
[单片机]
基于单片机锅炉液位控制系统
设计目的 首先采用液体的导电性,以按键模拟液位,这样可以很精确的检测到液位系统,同样达到预期的目的,通过单片机系统使数码管显示相应的数字。 系统采用5个按钮模拟液位来进行由下自上的液位检测。上电复位后,各部分均初始化,P2.0、P3.5、P3.6、P3.7置高电平,报警器不发声,电机不转动,LED显示灯不亮。显示器显示0时为复位情况,当液位到达规定高度时由液体导通电路,实现按钮的闭合后,再通过1位七段LED数码管显示液位位置,做出相应的报警提示,提醒工作人员在接到自动上液报警后按时手工恢复,保证液体供应充足以及设备的安全。当液位为最低液位时显示黄灯并报警,按下复位键报警器不响,当液位为5时报警器响,提醒工作人员液位已满,此时电机
[单片机]
ATMEGA128单片机的软件远程升级
摘要:介绍了ATMEGA128单片机应用中的在线编程方法。给出了软件IAP升级设计中应注意的一些关键技术,结合某市地铁调度系统对IAP升级的可靠性和保密性等问题进行了简单的论述。
关键词:IAP F lash bootloader 存储器 远程升级 在线升级
闪速程序存储器的编程方法常见的有以下几种:
(1)传统的并行编程方法;
(2)通过串行口进行在线编程ISPIn System Programmability:对器件或电路甚至整个系统进行现场升级或功能重构;
(3)在运行中,应用程序控制下的应用在线编程IAPIn Application Programming;IAP模式简单地说就是在某一个section中
[嵌入式]
基于51单片机对自动打铃系统的设计
51单片机自动打铃C语言程序: #include “reg51.h” #include “intrins.h” #define uchar unsigned char #define uint unsigned int uchar code DSY_CODE[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//共阴极总段// uchar DSY_BUFFER[]={0,0,0xBF,0,0,0xff,0,0};//时间显示时-分 模式 uchar DSY_BUFFER1[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf
[单片机]
如何才能使用CC2541蓝牙模块与单片机进行串口通信
一、CC2541器件概述 CC2541是一款针对低能耗以及私有2.4GHz应用的功率优化的真正片载系统(SoC)解决方案。它使得使用低总体物料清单成本建立强健网络节点成为可能。CC2541将领先RF收发器的出色性能和一个业界标准的增强型8051MCU、系统内可编程闪存存储器、8kBRAM和很多其它功能强大的特性和外设组合在一起。CC2541非常适合应用于需要超低能耗的系统。这由多种不同的运行模式指定。运行模式间较短的转换时间进一步使低能耗变为可能 二、CC2541芯片的特性参数 CC2541是一款针对蓝牙低能耗以及私有2.4GHz应用的功率优化的真正片载系统(SoC)解决方案。它使得使用低总体物料清单成本建立强健网络节点成为可
[单片机]