查看Keil编译代码大小

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/k331922164/article/details/92795511

在Keil中编译代码,超出单片机的存储容量,会弹出以下错误。

Error: L6406E: No space in execution regions with .ANY selector matching xxx.o.

那么,如何得知编译出来的代码,占用了多大的空间?

在Keil中按Rebuild(不是Build)。

没有错误的话,会得到下图所示。

在工程目录下,打开Listings目录,如下图所示。

这里,Libraries存放STM32的固件库,Listings存放映射表,Objects存放.o的中间文件以及.hex下载文件,USER存放源代码。

编译的过程,简单来说是Keil读取Libraries和USER中的源代码,编译成.o中间文件并存放在Objects目录,最后通过链接脚本,把若干个.o文件链接成.hex文件。

其中链接生成的报告在Listings目录中,打开它,可以看到.map文件。

用记事本打开.map文件,拉到最后几行。

这里的Code、RO Data、RW Data、ZI Data是和前面Keil编译的结果相一致的。

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

那么,我们可以得知,上面编译的结果,占用193.68kB的FLASH和5.93kB的RAM。

根据手册可得,STM32F103RCT6,有64kB的RAM和256kB的FLASH,能装得下这套代码。

使用Keil中的优化等级,可以使得下载文件的体积变小,O3是优化等级最高占用体积最小,O0则是最低占用体积也就最大。

优化等级越高,编译的时间越长。

猜你喜欢

转载自blog.csdn.net/k331922164/article/details/92795511