关于stm32的Code、RO-data、 RW-data、 ZI-data的测试(二)

上一章节讲到MDK编译程序后,会告诉你program size,其中有Code、RO-data、 RW-data、 ZI-data的大小的说明。
这里的说明的意思是主要是告诉你,此时你编写的工程:FALSH和SRAM的资源的使用状况。
我们可以打开map文件查看,此文件一般在OBJ文件夹中找到,不知道怎么查看和看的可以看我的上一篇文章里面的第一个链接。

program size的意思就是告诉你消耗的资源。那么这些变量究竟是存放在内存的什么位置呢?
笔者做了下面的测试,用于查看变量的存储地址。

如下所示,声明了2个全局数组,2个全局变量。
在这里插入图片描述
在main函数里面打印上述变量的地址。
在这里插入图片描述

下载到stm32单片机后,使用串口打印出来的信息。
在这里插入图片描述
这时候发现,全局变量的存储分配的顺序为:
(1)已初始的全局数组
(2)已初始化的全局变量
(3)未初始化的全局变量
(4)未初始化的全局数组

接着查看map文件!
在这里插入图片描述
此时查看map文件,再经过一些测试,主要是增大或者改小对应的变量的大小。来找到map文件中变化的数据。
从而确定,全局变量在实际SRAM中的分配的位置和顺序。

一、——.data段
起始地址:0x2000 0000
结束地址:0x2000 0000 +已经初始化的全局数组的大小+已经初始化的全局变量的大小+未初始化的全局变量的大小
存储的内容为:已经初始化的全局数组,已经初始化的全局变量,未初始化的全局变量

二、——.bss段
起始地址:.data的结束地址(x字节对齐)
结束地址:.bss段起始地址 +未初始化的全局数组的大小
存储的内容为:未初始化的全局数组

三、——HEAP(堆区)
起始地址:.bss段结束地址(x字节对齐)
结束地址:HEAP起始地址+启动文件里,声明的堆的大小(上述测试该处大小为0)

三、——STACK(栈区)
起始地址:HEAP结束地址(x字节对齐)
结束地址:STACK起始地址+启动文件里,声明的栈的大小(上述测试该处大小为0x400)

总结:本文主要讲述了
RW-data、 ZI-data空间具体在SRAM中存储的对应。

结论:
RW-data的大小 = 已经初始化的全局数组大小+已经初始化的全局变量大小+未初始化的全局变量的大小
RW-data存储在SRAM中的.data 段

ZI-data的大小= 未初始化的全局数组的大小+堆大小+栈的大小
ZI-data被分别存储在SRAM中的.bss段,堆段和栈段

下集预告:
我们知道,代码和字符串常量都是保存在FLASH里面的。
打开启动文件中,从上往下翻阅,可以看到此处有关于中断向量的地址声明
在这里插入图片描述
那么这个中断向量到底是存放在哪里的呢?

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值