IAR软件中查看代码大小

576 阅读3分钟

「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战」。

  在使用IAR软件时,各种调试功能使用起来都挺好的,唯一感觉有缺陷的就是不能查看代码大小。不像keil那样代码编译后可以直接看到大小。那么在IAR中有没有办法可以查看到代码的大小呢?当然是可以的,最简单的方法就是通过map文件查看。

  什么是map文件呢?简单的说map文件就是代码在编译后,关于代码的各种信息描述的文本文件。比如哪些变量在哪个地址空间存储?每个函数的入口地址是啥?每个变量都占用了多大空间等,在map文件中都会有详细的描述。

  现在通过一个简单的例程来演示如何查看map文件。

在这里插入图片描述

  这是一个简单的LED闪烁代码,LED指示灯1秒钟闪烁一次。编译完文件之后,在工程目录Debug目录中的List目录中就会生成map文件。

在这里插入图片描述

  用记事本打开这个文件,可以看到里面好多信息。

在这里插入图片描述

  最开始是软件版本及工程最后的编译时间,接下是输出的文件和map文件路径,最后一部分是编译过程中的命令,在这个命令中可以看到编译时都连接了那些目标文件。

  接下来在文件的中间部分就可以看到每个目标文件的存储地址和大小。

在这里插入图片描述

  这一部分中就可以看到工程中都用到了哪些目标文件,同时它的地址和大小是多少。

  接下来就可以看到代码占用空间的详细情况了。

在这里插入图片描述

  • ro code :代码的存储区,编译器生成的机器指令,这些内容被存储到ROM区。
  • ro data :Read Only data,只读数据域,它指程序中用到的只读数据,这些数据被存储在ROM区,因而程序不能修改其内容。 C语言中const关键字定义的变量就是典型的RO-data。
  • rw data:Read Write data,可读写数据域,它指初始化为“非0值”的可读写数据,程序刚运行时,这些数据具有非0的初始值,且运行的时候它们会常驻在RAM区,因而应用程序可以修改其内容。
  • rw data(abs):这里的abs暂时还不知道是什么意思,也没有找到相关资料。

  代码的大小就是最底下四个数据之和,在map文件的最后面也可以看到。

在这里插入图片描述

  在文件最后面也列出来代码和数据分别占用的空间大小,将这四个数据加起来619+136+269+6=1030 也就是当前代码的大小是1030字节,也就是代码大小约1K左右。

  可以通过STVP烧写软件打开二进制文件查看代码大小

在这里插入图片描述

  代码的范围是8000到82F0,共752个字节,为什么这里的字节数比较少呢?因为还有一部分数据默认是0.数据0在这个界面上不能明确的看出结束位置。所以这里只能看到非0的数据。

  以后再调试代码的时候就可以通过map文件来查看代码的大小了,同样还可以借助map文件优化代码。这个在下一篇文章中说明。