keil中如何查看代码大小

在用keil编译完代码后,会生成编译信息
在这里插入图片描述
(1) Code(inc.Data) : 包含两部分,即代码和数据
- code,即程序代码部分
- inline data. For example, literal pools(文字常量池), and short strings(短字符串)等. 这个一般被忽略,请大家注意!!!
- 代码段,存放程序的代码部分。
(2) RO Data: read-only data,只读的数据
Shows how many bytes are occupied by read-only data. This is in addition to the inline data included in the Code (inc. data) column. 除inline data 之外的所有只读数据。
只读数据段,存放程序中定义的常量。
(3) RW Data: read write data,可读写的数据
Shows how many bytes are occupied by read-write data.
读写数据段,存放初始化为非0值的全局变量。
(4) ZI Data: zero initialized data,零初始化的可读写变量
Shows how many bytes are occupied by zero-initialized data.
0数据段,存放未初始化的全局变量及初始化为0的变量。
存储Size:
RO size: Code + RO_data,表示程序占用Flash空间的大小。
RW size: RW_data + ZI_data,表示运行时占用RAM的大小。
ROM (minimum)size = Code + RO_data + RW_data (即烧/下载程序到FLASH/ROM时,所占用的最小空间)
Total ROM Size (Code + RO Data + RW Data)这样所写的程序占用的ROM的字节总数,也就是说程序所下载到ROM flash 中的大小。为什么Rom中还要存RW,因为掉电后RAM中所有数据都丢失了,每次上电RAM中的数据是被重新赋值的,每次这些固定的值就是存储在Rom中的,为什么不包含ZI段呢,是因为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域一律清零即可。包含进去反而浪费存储空间。RAM相当于内存,Flash相当于硬盘。
RAM size: RW Data + ZI Data (即程序运行的时,RAM使用的空间)

通过上述信息可以看出当前代码编译后的总大小为:16088+372+204=16664 字节
16664/1024=16.2734375 K
查看编译后的二进制文件大小
在这里插入图片描述
说明理论的计算和实际是相符的。
单片机在上电后默认是从Flash启动,启动之后会将RW段中的RW-data(初始化的全局变量)搬运到RAM中,但不会搬运RO段,即CPU的执行代码从Flash中读取,另外根据编译器给出的ZI地址和大小分配出ZI段,并将这块RAM区域清0.
其中动态内存堆为未使用的RAM空间,应用程序申请和释放的内存块都来自于该空间。

#include “main.h”
const staic int ADDR = 0x000000FF;		//存放在RO段
int num;								//存放在ZI段
int s = 100;							//存放在RW段

void main (void)
{
	...
}

还有一种方法,可以直接在keil生成的工程文件*.map中查看。
具体操作方法为,在keil中全部编译一次工程。
在这里插入图片描述
然后在双击工程文件名,这时候会打开一个map文件
在这里插入图片描述
拖动右侧滚动条,一直拖动到底部。
在这里插入图片描述
在这个文件最底部也会显示内存得占用情况,将滚动条向上滚动一点,还可以看到内存使用的详细情况。
在这里插入图片描述
通过编译器生成的报告,可以更清晰的看到每个文件占用内存情况。
如果感觉在工程中打开这个文件比较麻烦,也可以直接在工程文件夹中找到这个文件打开,找到后缀名为map的文件,以文本格式打开。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
拖动滚动条到最底部,就可以看到代码占用内存的详细情况。

  • 25
    点赞
  • 112
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值