结合STM32给大家描述一下单片机常见的划分区域

发布时间:2023-08-22  

编排 | strongerHuang   看到有小伙伴在讨论关于单片机内存的话题,今天就结合STM32给大家描述一下常见的划分区域。  

在一个STM32程序代码中,从内存高地址到内存低地址,依次分布着栈区、堆区、全局区(静态区)、常量区、代码区,其中全局区中高地址分布着.bss段,低地址分布着.data段。  

总的分布如下所示:

内存高地址 栈区

堆区
.bss段
.data段
常量区
内存低地址 代码区

  一、栈区(stack)

临时创建的局部变量存放在栈区。

函数调用时,其入口参数存放在栈区。

函数返回时,其返回值存放在栈区。

const定义的局部变量存放在栈区。

2、堆区(heap)

堆区用于存放程序运行中被动态分布的内存段,可增可减。

可以有malloc等函数实现动态分布内存。

有malloc函数分布的内存,必须用free进行内存释放,否则会造成内存泄漏。  

3、全局区(静态区)

全局区有.bss段和.data段组成,可读可写。  

4、.bss段

未初始化的全局变量存放在.bss段。

初始化为0的全局变量和初始化为0的静态变量存放在.bss段。

.bss段不占用可执行文件空间,其内容有操作系统初始化。  

5、.data段

已经初始化的全局变量存放在.data段。

静态变量存放在.data段。

.data段占用可执行文件空间,其内容有程序初始化。

const定义的全局变量存放在.rodata段。  

6、常量区

字符串存放在常量区。 常量区的内容不可以被修改。  

7、代码区

程序执行代码存放在代码区。 字符串常量也有可能存放在代码区。  

通过上面的介绍,可能你对各个数据的存储位置还是很模糊,下面通过一个简单的程序,再来体会理解一下。  

通过上面的介绍,可能你对各个数据的存储位置还是很模糊,下面通过一个简单的程序,再来体会理解一下

【多余一段】


 


#include 



static unsigned int val1 = 1;        //val1存放在.data段

unsigned int val2 = 1;               //初始化的全局变量存放在.data段

unsigned int val3 ;                  //未初始化的全局变量存放在.bss段

const unsigned int val4 = 1;         //val4存放在.rodata(只读数据段)



unsigned char Demo(unsigned int num) //num 存放在栈区

{

  char var = "123456";               //var存放在栈区,"123456"存放在常量区

  unsigned int num1 = 1 ;            //num1存放在栈区

  static unsigned int num2 = 0;      //num2存放在.data段

  const unsigned int num3 = 7;       //num3存放在栈区

  void *p;

  p = malloc(8);                     //p存放在堆区

  free(p);

  return 1;

}



void main()

{

  unsigned int num = 0 ;

  num = Demo(num);                   //Demo()函数的返回值存放在栈区。

}

上面我们已经对堆、栈、全局区、常量区、代码区进行了全面的分析,也举例进行了说明。


下面我们在对这些区存放在哪种介质上进行讨论。  


8、RAM和ROM、Flash Memory的物理特性


首先,我们需要明白RAM和ROM、Flash Memory的物理特性。  


9、RAM


RAM又称随机存取存储器,存储的内容可通过指令随机读写访问。


RAM中的存储的数据在掉电是会丢失,因而只能在开机运行时存储数据。


其中RAM又可以分为两种,一种是Dynamic RAM(DRAM动态随机存储器),另一种是Static RAM(SRAM,静态随机存储器)。  


10、ROM


ROM又称只读存储器,只能从里面读出数据而不能任意写入数据。ROM与RAM相比,具有读写速度慢的缺点。但由于其具有掉电后数据可保持不变的优点,因此常用也存放一次性写入的程序和数据,比如主版的BIOS程序的芯片就是ROM存储器。  


11、Flash Memory


由于ROM具有不易更改的特性,后面就发展了Flash Memory。Flash Memory不仅具有ROM掉电不丢失数据的特点,又可以在需要的时候对数据进行更改,不过价格比ROM要高。  


12、不同数据的存放位置


由前面的分析我们知道,代码区和常量区的内容是不允许被修改的,ROM(STM32就是Flash Memory)也是不允许被修改的,所以代码区和常量区的内容编译后存储在ROM中。  


而栈、堆、全局区(.bss段、.data段)都是存放在RAM中。  


至此,关于不同数据存放哪个区域已经全部介绍完了。


下面还将介绍一下Keil 的Build Output窗口。  


4e814abe-3b01-11ee-9e74-dac502259ad0.png

如上图,存在Code、RO-data、RW-data、ZI-data四个代码段大小。  


其中Code就是代码占用大小,RO-data是只读常量、RW-data是已初始化的可读可写变量,ZI-data是未初始化的可读可写变量。  


有些时候,我们需要知道RAM和ROM的使用情况如何,那么我们就可以使用下面的公式计算。  


RAM  = RW-data + ZI-data ROM = Code + RO-data + RW-data 



文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    是为什么很多企业一听到培训机构出来的都拒之门外。 如果是做单片机开发的,其实主要还是你的编程水平和思维,所谓的项目经验,追溯到底就是你的编程思维。 比如说给你一个功能,你有哪些实现的思路和方法,而这......
    如何快速的入门单片机?单片机自学教程有哪些?;如何快速的入门单片机开发?百度一大堆广告,然后就是乱七八糟的文章,看的眼花缭乱。 排在最前面的是培训机构,后面就是一大堆文章。 有建议自学的,有建......
    51单片机的启动代码究竟里面写了什么;在我们使用kei c51创建一个51单片机项目时,会有如下图所示的提示: keil创建新项目时,提示是否添加启动文件 一般情况下,需要选择“是”。当然,也可......
    在是什么水平? 先声明,我并不是什么大神,只是项目经验比较丰富。 目前只要不涉及复杂算法的单片机项目我都能做稳定,我是指软件方面,硬件不敢说。 能独立把产品软件做稳定,对我来说就够了,技术的终点是解决痛点,创造......
    程序开发经验不丰富的初学者,如果程序运行中出现问题,无法通过肉眼观察程序运行的现象找到程序代码的问题,特别是一些比较隐秘的问题,更是难以解决。 二.51仿真器有必要买吗? 51单片机项目我已经做过很多,但到......
    要花费更多的时间和精力进行设计、开发和调试。 但是,这些项目可以提高STM32单片机的应用能力、编程思维和代码水平。 三、高级 当您掌握了上述的项目之后,您可以尝试更高级的STM32单片机项目,例如: 1......
    80c51单片机的控制总线信号有哪些 80c51单片机特点;  80c51单片机的控制总线信号有哪些   80C51单片机的控制总线信号包括以下几种:   ALE(Address Latch......
    单片机启动文件.s有什么作用;在我们使用kei c51创建一个51单片机项目时,会有如下图所示的提示: keil创建新项目时,提示是否添加启动文件 一般情况下,需要选择“是”。当然,也可......
    单片机启动文件.s有什么作用?;在我们使用kei c51创建一个51单片机项目时,会有如下图所示的提示: keil创建新项目时,提示是否添加启动文件 一般情况下,需要选择“是”。当然,也可......
    51单片机的启动文件内容;在我们使用kei c51创建一个51单片机项目时,会有如下图所示的提示: keil创建新项目时,提示是否添加启动文件 一般情况下,需要选择“是”。当然,也可......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>