【STM32】Keil中的Code,RO,RW,ZI以及堆栈

本文改自?链接: Keil中的Code,RO,RW,ZI分别表示什么
为方便了解,增加了一些内容。

keil在编译完成之后会出现这么一段文字。
在这里插入图片描述
这些参数的单位是Byte
Code:代码的大小
RO:常量所占空间,存储const常量和指令
RW:程序中已经初始化的变量所占空间,存储初始化值不为0的全局变量。
ZI:未初始化的static和全局变量以及堆栈所占的空间,存储未初始化的全局变量或初始化值为0的全局变量

上述参数和芯片Flash以及SRAM的对应关系是
Flash占用大小=Code+RO+RW
SRAM占用大小=RW+ZI

由于SRAM在掉电的时候数据会丢失,所以在主flash启动模式,上电后上电后首先从0x00000000(映射到0x08000000,这里只考虑从内部Flash启动)处获得中断向量表然后在运行用户代码之前会在标号2处有一段引导代码bootloder负责把存在Flash中的初始化变量的值Copy到SRAM中对应的变量位置(标号3),之后把ZI区域全部清零(标号4),之后才正式开始运行用户代码(标号5)。

所以在计算时RW要使用两次。
在这里插入图片描述
平常所说的堆栈指的是栈Stack,在单片机的启动文件中可以看到,单片机上电的时候会在RAM中分配一段(一般是高地址)空间,这就是栈。

栈主要用于存放局部变量,函数形参等,属于编译器自动分配和释放的内存,栈的大小不能超过内部 SRAM 的大小。如果工程的程序量比较大,定义的局部变量比较多,那么就需要在启动代码中修改栈的大小,即修改 Stack_Size 的值。如果程序出现了莫名其妙的错误,并进入了 HardFault 的时候,你就要考虑下是不是栈空间不够大,溢出了的问题。

栈是从高往低生长,所以结束地址就是栈顶地址。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值