MCU调试之各编译器查看flash和ram占用

一般在MCU资源紧张的情况下会去关注当前ram空间和flash空间的剩余大小,防止程序运行出错,下面介绍三款编译器的空间占用大小查看。

S32DS编译器

S32DS编译器生成的文件,因为这个编译器是根据Eclipse魔改的,内部集成了ARM gcc工具链,一般集成此工具链编译出来的结果形式都是如下图所示。

在这里插入图片描述

text: text段最终存放在FLASH里而,所包含的内容是代码和常量
data: 放的是初始化的变量,且同时计入RAM和FLASH,全局或者外部变量
bss: 放的是RAM中未初始化的变量,全局或者外部变量
dec: dec = text+data+bss
因此,计算RAM空间占用=data+bss
计算Flash空间占用=text+data
Hex:非下载文件大小,而是指16进制,也是dec段的16进制显示。

Keil的编译结果

Program Size: Code=86496 RO-data=9064 RW-data=1452 ZI-data=16116

Code:是代码占用的空间
RO-data: Read Only 只读常量的大小,如const型
RW-data:(Read Write)初始化了的可读写变量的大小
ZI-data:(Zero Initialize)没有初始化的可读写变量的大小。ZI-data不会被算做代码里因为不会被初始化。
因此FLASH中占用的空间为:Code+RO-Data+RW-Data
程序运行的时候,芯片内部RAM使用的空间为: RW-Data + ZI-Data
关于.elf文件介绍,可以查看此链接:https://zhuanlan.zhihu.com/p/521340262

IAR的编译结果

Iar的编译结果查看和上述两个都不一样,程序编译完成会生成一个.map文件,打开此文件,拉到文件末尾,即可以查看当前编译结果。
在这里插入图片描述

空间占用超出MCU资源上限优化方法:

  1. 减小全局变量的使用,特别是定义数组时,根据需要定义其大小。
  2. 在使用操作系统时,根据每个任务的实际使用情况调整堆栈总空间大小。
  3. 避免重复功能,对于重复代码,可以将功能抽象为通用函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值