查看原文
其他

Keil系列教程05_工程目标选项配置(一)

strongerHuang 嵌入式专栏 2021-01-31

置顶/星标公众,不错过每一条消息!


    本教程由原创作者strongerHuang于2018年11月更新发布。

标签:Keil、 MDK-ARM、 µVision

版权所有:禁止商用

申明:该文档仅供个人学习使用,转载请公众号联系作者授权。


1写在前面

文讲述的内容是“Options for Target”,即工程目标选项的配置内容,也就是我们常见的工程配置内容。


由于目标配置的选项比较多,我将其分为工程目标选项配置(一)和工程目标选项配置(二)两篇文章来讲述。


目标选项包含了一个工程目标所有的配置信息,这些信息是保存于我们工程(.uvprojx)和对应的(.uvoptx)文件。


2

本文要点

本文主要讲述的是目标选项的配置,但为了让更多人明白什么是目标选项,首先将简述工作空间、工程、目标的意思和区别。


2.1 打开目标选项的三种方法

A.点击“目标选项”快捷按钮,如开篇第一张图。


B.快捷键:Alt + F7

提示:如果是配置工程,需选中工程,再按Alt + F7。(如果你选中文件,是对文件的一些配置)


C.从菜单中打开,Project -> Options for Target,如下图:


2.2 本文所讲述的目标选项

由于目标选项里面内容较多,本文只讲述前五项:Devie设备、 Target目标、 Output输出、 Listing列表、 User用户。后五项在下一篇文章讲述。


本文旨在让大部分人明白目标选项的配置,为了使文章内容精简,过于简单和不常用过于复杂的只简述。


3

工作空间、工程、目标含义和区别

什么是工程目标选项配置?或许有些人分不清工作空间、工程、目标这三个名词的意思和区别,这里就简单讲述一下它们的含义和区别。


可以关注该系列教程后面新建多工程,多目标的文章。


工作空间、工程、目标它们三个是从大到小,依次包含的关系:工作空间 > 工程 > 节点。也就是说:一个工作空间可以有多个工程,一个工程可以有多个目标。示意图,如下:


举个例子:一个项目,由主机从机组成,但项目为了区分产品的高低端,将产品做成简单复杂两个版本(简单版只保留复杂版的部分功能)。举例示意如下图:

本节内容不过多描述,在大型的实际项目中容易看见,一般不是很大项目,基本就是一个工程,一个目标或多个目标。


初学者一般都是一个工程对应一个目标,这样简单明了。若初学者,不能理解可以略过。


4

Device设备(器件)

Keil新建软件工程》第一步就是选择设备(器件)。强调一点就是:器件可以通过输入查找,也可以通过列表查找


5

Target目标

这里说的目标和上面说的工程目标不一样,是工程目标的目标。从内容可以看得出来是工程目标的调试晶振频率、选择的编译器、RAM和ROM分配的地址空间等。


第1处:晶振频率

这个值主要用于仿真调试用,一般我们使用硬件调试可以不用管这个值。


第2处:操作系统

很好理解,是否选择Keil自带的RTX操作系统,一般我们都不选。


第3处:系统预览文件

这里我们一般是默认使用系统自带,不选择自己定义的。


第4处:生成代码所选择的编译器


第5处:使用交叉模块优化、使用微库

交叉模块一般我们不使用,微库这个功能常用与printf函数。


第6处:ROM存储地址

这里的ROM存储指的是程序储存的地址,分片外、片内两种。


程序存储在片内好理解(初学者一般下载程序都是下载到片内FLASH),片外存储程序对于初学者来说比较少见,一般都是项目做大了,或有特殊要求时,片内不够使用了才将程序存储在片外。


第7处:RAM存储地址

RAM存储地址和ROM道理一样,可以分片内和片外。


6

Output输出

输出分两类:

1.输出(创建)可执行文件:我们下载到处理器里面的程序就是该类;


2.输出库:对于初学者来说一般不使用库,但对于很多从事特殊行业技术开发的公司来说,可能比较常用该功能。


第1处:输出路径

输出路径就是在工程编译的过程中,输出这些文件保存的文件夹。(Keil V5一般默认是保存在Objects文件夹下面)


第2处:输出可执行文件名

输出的可执行文件和库的名称就是在这里定义。比如我们常见输出Hex文件,其名称就是这里定义的。


第3处:输出可执行文件

这里和输出库是二选一,选择了输出可执行文件就不能选择输出库。


Debug Infomation:输出调试信息。勾选上这个选项,我们才可以进行调试。


Create HEX File:输出可执行Hex文件。很多初学的朋友问:“在哪里设置生成Hex?”,这里勾选上就行了。


Browse Information:输出浏览信息。勾选上这个我们才能使用go to definition of这个功能。很多人问:“为什么我不能跟踪代码了”,原因就在这里。


提示:输出这些中间文件都很费时间,如果都不勾选这些选项,编译速度会很快。


第4处:输出库

选择输出库,上面可执行文件就不能输出。

提示:这里输出(生成)的是静态库,并非动态库。


7

Listing列表

这个选项是关于生成列表相关的选项,对代码分析比较透彻的工程师就需要了解这个选项。常见的map地址的分布,就是在这里配置生成的。


第1处:输出路径、宽高

选择列表文件输出的文件夹。可设置文件页面的宽度,长宽。


第2处:输出汇编列表

勾选上会输出汇编列表信息(产生后缀为 .lst的文件)。如果工程中没汇编文件,则不会输出信息。


第3处:C编译列表

C编译程序列表选项,勾选上可生成.txt, .i文件。


第4处:链接列表

可选择生成或禁止生成.map文件。可设置生成代码的详细信息。可选择性的选取输出MAP文件。


8

User用户选项

这个选项是针对用户而设计的,方便用户执行一些程序。比如:编译完代码之后,我要将生成的Hex文件拷贝到其它地方。


纵观上图可以看见,第1、2、3处功能类似,都是让用户运行程序,只是运行的条件不同而已。


这里可以参看曾在微信公众号分享过的一篇文章《MDK-ARM如何通过配置命令生产Bin文件


第1处:编辑之前运行用户程序

第2处:编译之前运行用户程序

第3处:编译之后运行用户程序


第4处:编译之后执行条件

Run "After Build" conditionally:执行条件;

Beep When Complete:编译完成发出声音;

Start Debugging:启动调试程序。


9

说明

1.该文档仅供个人学习使用,版权所有,禁止商用。


2.本文由我一个人编辑并整理,难免存在一些错误。


3.本文收录于公众号「嵌入式专栏」,关注微信公众号回复【Keil系列教程】即可查看全系列教程。  


10最后

若觉得文章对你有帮助,随手点赞、分享,也是对我莫大的支持和鼓励。


扫描下面二维码、关注公众号,在底部菜单中查看更多精彩内容!



长按识别图中二维码关注

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存