stm32中堆、栈、flash、ROM、RAM、bss段、data段、text段、Code、Ro-data、 ZI-data、RW-data简介

1. 堆、栈、flash、ROM、RAM、bss段、data段、text段、Code、Ro-data ZI-data、RW-data的区别?

1.1 堆、栈简介

堆栈是指在stm32启动文件中定义的那一段head和stack,是跟在data段和bss段后面的一块空间,要区别于操作系统里的线程栈。详情可查看.map文件
在stm32中,通常堆向高地址增长(向上增长),栈向低地址增长(向下增长);

  • 堆:是用户调用malloc()时申请的内存;
  • 栈:是提供给局部变量使用的,即由c语言机制自动申请和释放; 

1.2 flash、ROM、RAM的区别

  • 在stm32中flash就是ROM,掉电数据不会丢失;(通常保存着text段、Code、Ro-data、Rw-data)
  • RAM就是运行内存,掉电数据就丢失;(通常保存着堆、栈、bss段、data段、ZI-data、RW-data)

 1.3 通常stm32在keil里编译完后被分成5个内存段(堆、栈、bss段、data段、text段)

以下存储在RAM

  • 堆区:在启动文件里分配,作为用户主动申请时的空间,如调用malloc()
  • 栈区:在启动文件里分配,作为局部变量自动申请和释放空间的变量(也有说是编译器分配的空间)
  • 全局区和静态区(bss+data):存放全局变量,静态变量的区域;其中bss段(ZI-data)存放未初始化的全局变量和静态变量;data段(RW-data)存放初始化后的全局变量和静态变量;

以下存储在flash(text段)

  •  文字常量区:宏,常量字符串等存放区域;(RO-data)
  •  程序代码区:程序代码块存放区域;(Code)

2. map文件最后面部分表达的意思

Total RO Size (Code + RO Data) 66092 ( 64.54kB)
Total RW Size (RW Data + ZI Data) 9256 ( 9.04kB)
Total ROM Size (Code + RO Data + RW Data) 66672 ( 65.11kB)

  • Code + RO Data:text段,即文字常量和程序代码区;
  • RW Data + ZI Data:bss段和data段,即全局变量和静态变量区;
  • Code + RO Data + RW Data:text段+data段组成总的ROM,即工程代码在flash里占的空间大小;不包含ZI Data是因为,它里面的数值是未初始化或初始化为0的,所以在启动系统的时候直接将这块RAM清0即可。而RW Data是在RAM中使用的,为什么需要存储到flash,是因为这部分变量都是有初始化值的,如果只存在RAM中,在掉电后数据就丢失了,所以需要在flash中存一份。
  • 13
    点赞
  • 123
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值