前面介绍了认识开发环境,当然你学习上面这些知识还不会进行编译一个项目的,那么你也许会急着想知道下一步怎么办?怎么样才可以把这个项目编译出来,或者烧写到开发板里进行测试。下面就来解决编译这个问题,编译原因在前面已经说过,就是把人类理解的语言转换为机器语言。在Keil的集成开发环境里,界面上主要有四个编译选项,如下图所示:

玩转STM32(7)第一次编译

下面来从左到右来介绍这四个编译选项的使用和意义,第一个选项是编译一个文件,并且是代码区里选中的文件,如上图就是main.c是当前活动的、选中的,其它文件不作任何的处理。那么为什么要有这样一个选项,而不是编译所有的文件呢?对于初学者来说,要理解这个区别有点困难,因为他接触到的代码,都是非常少,比如几百行,几千行,这样编译一个文件,和编译所有文件就没有太大区别了。如果在一个项目里包含着一个实时操作系统的源码,一个网络协议栈的源码,就不一样了。当只编译当前这个文件时,可能只要几秒钟,就可以看到编译结果了。如果编译整个项目,至少要几分钟,多的达到十几分钟,这样就比较出来时间的差别了。对于开发人员来说,肯定花费在编译上时间越少越好,这样大大地提高开发效率,如果不注意到这一点,往往发现你还在加班,别人已经下班了。当你点击这个选项之后,就会把选中的文件进行编译,把结果输出在提示区,这里可以看到0个错误和0个警告。如果你发现不是0个错误,就要去查找这个错误是怎么样发生的,比如是否语法错误,是否没有定义等等。如果有不是0个警告,也需要查看一下是什么警告,如果是严重的,肯定要解决,如果不是很严重的,可以放到后面有空闲时间再去查找。一定要严格要求自己,做无错误无警告。

第二个是build选项,这个选项就是编译项目里所有文件。与第一个的区别,在上面已经说了。使用这个选项,一般就是当你的项目确认完成了,就可以使用它来生成可执行文件,比如编译出来HEX文件,就可以烧写到开发板里。当你点击这个选项之后,就会在提示区输出如下图显示:

玩转STM32(7)第一次编译

在这里可以看到提示信息,不但编译了文件,还把编译之后的结果进行连接到一起,生成了目标文件,并且显示出来整个目标文件代码大小、只读数据大小、读写数据大小、还在编译器默认初始化为0的数据大小。接着下来就是创建HEX文件的提示信息,一般情况下都是使用HEX文件来烧写到CPU里面。

为了更好地理解这些提示,可以看下面解释:

Code :是程序中代码所占字节大小

RO-data :程序中所定义的指令和常量大小 (个人理解 :Read Only)

RW-data :程序中已初始化的变量大小 (个人理解”:Read/Write)

ZI-Data :程序中未初始化的变量大小 (个人理解 :Zero Initialize)

ROM(Flash) size = Code+RO-data+RW-data;

RAM size = RW-data+ZI-data

可以通过.map查看占用的flash和ram大小

 

第三个Rebuild选项,这个选项主要用来重新编译整个项目。因为有时候某些原因导致源代码文件的日期比较编译管理文件的日期还早,这样编译器就不会去编译这些文件,导致使用旧的编译中间文件,这样就会导致编译最终的结果不对。因此,这个选项就是提供了一个复位的功能。意思就是说,不管中间编译文件怎么样,全部给我重新编译所有文件,也不管编译时间长短了。特别在一个大的项目,有多人开发时,就常常会发生这样的事情,需要重新编译所有文件。

 

第四个Batch build选项,这个选项就是批编译。为什么要批编译呢?因为有一些库开发人员,同样的库可以适用在多个工程里,那么他修改一下库,就想每个库都编译一下,是否每个工程都正确,同时也可以生成多个目标文件进行测试。另外一种情况,就是开发目前这个项目,是依赖多个其它项目的,要把那些项目一起重新编译生成目标文件。

到这里就学会了开发环境的四个选项,知道从那里生成目标文件了。

https://mysoft.blog.csdn.net/article/details/51749579

玩转STM32(7)第一次编译

相关文章: