STM32关于IAR和Keil中如何查看代码段的大小

今天在看IAP下载的时候发现需要知道自己编译出来的代码段的大小来设置FLASH的偏移量,在keil下编译默认是会显示程序的大小的:


可以清除的看到代码(Code)占了29704个字节,只读常量(RO-data)占6456个字节,已初始化的全局变量(RW-data)占64个字节,未初始化的全局变量(ZI-data)占62400个字节。那么哪些是存放在FLASH中,哪些是存放在RAM中呢?

Code存放在FLASH中是毋容置疑的,RW-data与ZI-data存放在RAM中也是毋容置疑的,那RO-data到底是存放在哪里呢?RO-data是常量的意思,常量在程序中如何表示,当然是添加Const。但是添加了Const的常量一定是存放在FLASH中吗?
这里就不验证了,直接说结论,有兴趣的朋友可以自己去验证。如果这个CONST是定义在全局的,那么它会被存放在FLASH中,如果这个CONST是在局部的,那么它会被存放在RAM中。但是查了很多资料,也没有人能说清这个RO-DATA到底是局部的常量,还是全局的常量,因此抱着“选大不选小”的原则,就把这个RO-DATA当做是存储在FLASH中,再做FLASH偏移的时候把它的大小也添加进去。

再说IAR。

IAR的编译器默认是不会打印编译的这些信息的,


点击IAR编辑栏的Tools按钮,选择Options..,


进入到IDE Options界面,点击Messages选项栏,在Show build message:下拉框中选择All,



这样在编辑的时候就会打印所有的编辑信息,当然也包括代码段的大小信息。




猜你喜欢

转载自blog.csdn.net/qq_26226375/article/details/78865240