历史上的今天
返回首页

历史上的今天

今天是:2024年12月14日(星期六)

2018年12月14日 | KEIL工程目标选项配置

2018-12-14 来源:eefocus

打开目标选项的两种方法


1.点击目标选项快捷按钮,如下图:



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



1.Device设备(器件)


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



2.Target目标



第1处:晶振频率。


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


第2处:操作系统。


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


第3处:系统预览文件。


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


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


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


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


第6处:ROM存储地址。


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


程序存储在片内好理解(初学者一般下载程序都是下载到片内FLASH),片外存储程序对于初学者来说比较少见,一般都是项目做大了,或有特殊要求时,片内不够使用了才将程序存储在片外。常见使用片外的例子“外部NorFlash存储程序代码”就会用到片外的存储地址。


第7处:RAM存储地址。


RAM存储地址和ROM道理一样,可以分片内和片外。常见例子“外部SRAM作为运行内存”。


3.Output输出


从选项名“Output”可以知道该选项里面内容的主要意思,就是输出一系列相关的内容。输出分两类:


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


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



第1处:输出路径。


输出路径就是在工程编译的过程中,输出这些文件保存的文件夹。Keil V5一般默认是保存在Objects文件夹下面,我建立工程一般也使用这个默认的路径。【其内容可以全部删除,最好配置在单独一个文件夹下面,代码备份时方便删除】


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


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


第3处:输出可执行文件(重点)。


这里和输出库是二选一,选择了输出可执行文件就不能选择输出库。重要一点:输出这些信息都很费时间,如果都不勾选这些选项,编译速度会很快。


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


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


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


第4处:输出库。


拓展一点:这里输出(生成)的是静态库,并非动态库。初学者可以不用去理解。


4.Listing列表


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



第1处:输出路径、宽高。


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


第2处:输出汇编列表。


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


第3处:C编译列表。


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


第4处:链接列表。


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


5.User用户选项


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


纵观下图可以看见,第1、2、3处作用相同,都是让用户运行程序,只是运行的条件不同而已。上面说的用户程序,勾选上,可以“DOS16模式”运行。



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


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


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


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


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


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


Start Debugging:启动调试程序。


6、C/C++选项


C/C++选项最为重要,因此部分功能需要重点强调。看选项标题“C/C++”,针对的主要就是C/C++,和后一个选项“Asm”有类似之处。



第1处:预处理(Preprocessor Symbols)

这里主要就是预定义功能,相当于在程序中的#define xxxx。我上面预定义STM32F10X_HD,在stm32f10x.h文件中就不用定义了。


第2处:语言代码生成(Language / Code Generation)


Language/code Generation语言代码生成,可以理解成编译、链接到最后生成代码。这部分功能对于代码优化比较重要,初学者可以不用过多理解,对代码大小、运行速度等性能要求较高的人就需要深入理解 


Execute only Code:只生成执行代码;


【设置编译器命令行:--execute_only】


只生成执行代码防止编译器生成任何数据访问代码部分。


Optimize:优化选择项,有Level0 - Level3四个选项。


【设置编译器命令行:-Onum】


初学者、在线调试建议使用Level0,也就是不优化,这样执行的效果才和代码一样。如果配置成Level3,在线调试可能有些地方优化而不能打断点。


Optimize for Time:优化时间,即优化代码中费时的地方。


【设置编译器命令行:-Otime】 --split_sections


比如有些算法,本身代码量就比较大,运行需要很长时间(假如需要2秒),这个时候勾选上该功能,会发现运行时间有比较明显的减少(或许不到1秒时间)。


Split Load and Store Multiple:加载和存储多个分裂。


【设置编译器命令行:--split_ldm】


非对齐数据采用多次访问方式。当 LMD/STM 指令有 4 个以上产生时,列分裂LMD 和 STM 指令,以减不中断延迟。


One ELF Section per Function:优化每一个函数 ELF 段(建议都勾选上)。


【设置编译器命令行:--split_sections】


每个函数都会产生一个 ELF 段,勾选上,允许优化每一个 ELF 段。这个选项可以减少潜在的共享地址、数据和函数之间的字符串。


直白的意思:可以减少代码量ROM的大小(内存RAM不会减小)。


举一个例子,勾选之前和勾选之后,编译后存储大小对比:


勾选之前:


Program Size: Code=2540 RO-data=336 RW-data=40 ZI-data=1024


勾选之后:


Program Size: Code=908 RO-data=320 RW-data=40 ZI-data=1024


Strict ANSI C:标准(严格)的ANSC。


【设置编译器命令行:--strict】


也就是说:编译时严格按照标准的ANSI C进行检查。


Enum Container always int:枚举总是int型


【设置编译器命令行:--enum_is_int】


很容易理解,我们枚举时成员变量类型为int型。


Plain Char is Signed:纯字符标记为字符。


【设置编译器命令行:--signed_chars】


代码举例:char a[] = “abcd”; 也就是说将“abcd”标记为字符型。


Read-Only Position Independent:为常量生成独立的代码空间。


【设置编译器命令行:--apcs=/ropi】


比如:我们定义字库变量为常量,勾选该选项,会将这些字库变量放在独立的代码空间。

 

Read-Write Position Independent:为可读写代码生成独立的代码空间。


【设置编译器命令行:--apcs=/rwpi】


Warnings:警告


【No Warnings设置编译器命令行:-W】


No Warnings:不会有警告提示和输出;


All Warnings:所有警告提示和输出。


Thumb Mode:Thumb模式。


指定设置文件或文件夹(组)为Thumb模式。


【注意:在工程中该模式为默认,也就是不能选择】

 

No Auto Includes:不自动添加头文件(一般不勾选)。


不勾选该选项,编译器就会在Keil安装路径寻找你工程中.h文件。


举例:我们定义uint8_t是定义在stdint.h文件里面的,但是我们工程目录下一般是没有stdint.h文件。这时候,编译器就会在Keil路径下去寻找stdint.h文件。


C99 Mode:C99标准模式。


【设置编译器命令行:--c99】


C语言有标准有多个版本,如C89、C90、C99等。


第3处:包含路径(Include Paths)


包含路径是使用Keil(及类似)软件必须掌握的一项。包含路径就是指定我们工程中使用文件所在的位置,让编译器找到相应的文件。是初学者、高级软件工程师都必须掌握的一项。



第4处:多功能控件(Misc Controls)


指定没有单独的对话框控件。例如:错误消息用日本语言来显示消息。【不常用】


第5处:编译器控制字符串(Compiler control string)


这里是针对编译器执行的命名,显示当前在编译器命令行指令。


在上面“第2处:语言代码生成”中有一个中括号【设置编译器命令行:】


里面的命名就显示在这里。


7、Asm选项


从这个选项的排版和结构可以知道,和前面一个选项“C/C++”类似,只是这里针对的是Asm。因此,这一章节只简述,不会重点强调,可以参看上一章节进行对比,第3、4、5处和C/C++选项一样,这里不讲述。



第1处:有条件的装配控制符号(Conditional Assembly Control Symbols)


指定汇编条件,这里类似上一章节C/C++选项中的预处理。


第2处:语言代码生成(Language / Code Generation)


和上一章节类似。


Read-Only Position Independent:为常量生成独立的代码空间。


Read-Write Position Independent:为可读写代码生成独立的代码空间。


Thumb Mode:Thumb模式。


Split Load and Store Multiple:加载和存储多个分裂。


Execute only Code:只生成执行代码;


No Auto Includes:不自动添加头文件(一般不勾选)。


8、Linker选项


这个选项Linker链接,也就是是链接器配置选项。可以修改、编辑和查看链接的文件。第1、2处是重点,第3、4处和C/C++选项一样,这里不讲述。



第1处:使用分散文件加载对话框Target页面(Use Memory Layout from Target Dialog)


Make RW Sections Position Independent:使RW段独立。


【设置编译器命令行:--rwpi】


启用时:变量区域(包含RW和ZI)具有独立地址。


禁用时:变量区域(包含RW和ZI)位于绝对的内存地址。


 Make RO Sections Position Independent:使RO段独立。


【设置编译器命令行:--ropi】


启用时:常量和代码区域(RO)具有独立地址。


禁用时:常量和代码区域(RO)位于绝对的内存地址。


 Don't Search Standard Libraries:不搜索标准库。


【设置编译器命令行:--noscanlib】


禁用默认编译器运行时库的扫描。


 Report 'might fail' Conditions as Errors:报告'might fail'条件认为是错误。


【设置编译器命令行:--strict】


报告的条件可能导致失败的错误,而不是警告。


 X/O Base:X/O基地址。


【设置编译器命令行:--xo_base=address】


R/O Base:R/O基地址。


【设置编译器命令行:--ro_base=address】


R/W Base:R/W基地址。


【设置编译器命令行:--rw_base=address】


disable Warnings:警用警告。


【设置编译器命令行:--diag_suppress】


第2处:分散文件(Scatter File)


这里可以加载、查看和编辑分散文件。点击后面就的三点“...”可以加载文件;点击“Edit...”查看和编辑对应的文件。



9、Debug选项


这个选项比较重要,主要用于(软件仿真、硬件在线)调试使用。由于软件仿真和硬件在线调试配置界面基本一致,而现在我们基本都是硬件在线调试。因此,只选择硬件在线调试界面进行讲述。



第1处:选择硬件在线调试


下载调试器的选择不用多说,主要说一下后面“Setting”。很多人常用J-Link下载调试器,而调试STM32时,可以使用四线SWD模式。如果使用J-Link进行SWD调试。这个时候就需要在“Setting”里面选择“SW”模式,如下如:



第2处:选择硬件在线调试


Load Application at Startup:启动时加载应用程序。


Run to main():程序执行到main()函数。


进入调试模式时,程序自动运行到main函数处。


Initialization File:加载、编辑初始化文件。


这里在某些情况下可以使用,比如:在RAM中调试代码。可以参看我的文章:STM32内部RAM在线调试配置方法及详细说明(基于Keil开发工具)。


第3处:复位调试会话设置(Restore Debug Session Settings)


这里复位设置就是恢复设置的意思,如果勾选上,点击一下“复位”就会恢复到之前的状态。包括:断点Breakpoints、窗口Watch Windows、性能分析器 Performance Analyzer、内存窗口Memory Window、工具箱Toolbox、系统查阅器System Viewer等。


第4处:DLL文件(最好默认)


这里的配置属于Keil自身的配置,最好不要修改。


CPU/Driver DLL - Parameter:CPU驱动文件和参数。


Dialog DLL - Parameter:会话框DLL文件和参数。


第5处:管理组件描述文件


Manage Component Viewer Description Files


这里一般不用去管理。


10、Utilities选项


本章节内容公共选项,内容比较简单。



第1处:配置FLASH菜单命名(Configure Flash Menu Command)


这里是二选一选项,一般我们使用上面的“Update Target Driver for Flash Programming”。


Use Debug Driver:使用调试驱动。


Update Target Before Debugging:调试之前更新目标。


一般都勾选上,因为我们下载程序之前检测到代码修改了,就会重新编译程序(也就是更新目标)


Setting:设置。


很多人下载程序之后,需要复位一下程序才运行,原因在于没有勾选“Reset and Run”,如下图:



第2处:配置图像文件的处理(Configure Image File Processing)


这个选项我们不常用,感兴趣的朋友可以自行了解一下。


推荐阅读

史海拾趣

Hsuan Mao Technology Co公司的发展小趣事

Hong Kong X'Tals Ltd在电子行业的发展故事

故事一:精密时间与频率产品的创新之路

Hong Kong X'Tals Ltd(简称HKC)自1991年成立以来,一直致力于精密时间和频率产品的研发与生产。公司最引人注目的成就是其KSTAR系列全球导航卫星系统(GNSS)驯服振荡器(GNSSDO)的推出。这款新产品不仅接收来自北斗、GPS、GLONASS和GALILEO等多卫星系统的信号,还具备高灵敏度和低噪声的特点,长期频率稳定性优于1E-12。KSTAR系列GNSSDO的推出,标志着HKC在通讯、自动驾驶、能源和金融等领域的时间同步解决方案上达到了国际领先水平。这一创新不仅增强了公司在全球市场的竞争力,也为众多行业客户提供了更加精准和可靠的时间同步服务。

故事二:从石英晶体到国际市场的跨越

HKC的母公司Kolinker Industrial Equipments Ltd拥有超过13年的中国晶体行业经验,并在深圳设立了首家中国本地的晶体工厂,该工厂荣获QS9000和ISO/TS16949认证。这一成就不仅体现了HKC在晶体制造领域的专业实力,也为其产品打入国际市场奠定了坚实的基础。HKC凭借其高质量的石英晶体产品,成功进入东欧、日本、韩国、中国大陆、北美、台湾和西欧等市场,成为国际市场上备受瞩目的晶体产品供应商。

故事三:技术研发与产品多元化的并行发展

HKC深知技术研发对于企业发展的重要性,因此不断加大在研发领域的投入。公司不仅专注于晶体、谐振器和振荡器的研发与生产,还积极拓展产品线,推出了一系列满足不同行业需求的电子产品。例如,在工业自动化领域,HKC设计并制造了多款机电一体化设备,赢得了国内外众多知名家电制造商的青睐。此外,公司还涉足新能源行业,通过投资组建益阳晶鑫新能源科技实业有限公司,致力于多晶硅产业链的建设与发展。

故事四:品质管理与国际认证的双重保障

HKC始终将品质管理视为企业发展的生命线。公司早在2000年和2003年就分别通过了ISO9002 1994及ISO9001 2000质量管理体系认证,成为同行业中最具实力的公司之一。这一系列的国际认证不仅证明了HKC在品质管理方面的卓越表现,也为其赢得了国内外客户的广泛信赖。HKC始终坚持以客户为中心,不断提升产品品质和服务水平,努力成为电子行业的佼佼者。

故事五:全球化战略与本土化运营的有机结合

随着全球市场的不断扩大,HKC积极实施全球化战略,在全球多个地区设立分公司和生产基地。同时,公司也注重本土化运营,根据不同地区的市场特点和客户需求,提供定制化的产品和服务。例如,HKC在中国内地市场就设立了多家子公司和生产基地,通过深入了解本地市场需求和客户需求,不断优化产品结构和服务模式,赢得了中国市场的广泛认可。这种全球化战略与本土化运营的有机结合,为HKC的可持续发展提供了强有力的支撑。

Econais公司的发展小趣事

随着技术的不断成熟和市场的日益扩大,Econais开始将目光投向全球市场。公司积极参加各类国际展会和研讨会,与全球各地的客户和合作伙伴建立联系。同时,Econais还针对不同地区的市场需求,推出定制化的产品和解决方案。这些努力使得Econais在全球范围内的市场份额逐渐扩大。

EXCELTA公司的发展小趣事

Excelta公司创立于20世纪90年代初,当时电子元器件市场正处于快速发展阶段。创始人李明看到连接器市场的巨大潜力,决定投身其中。然而,初创时期资金紧张,技术储备薄弱,公司面临巨大挑战。李明带领团队日夜兼程,通过技术创新和成本控制,成功开发出第一款具有竞争力的连接器产品,并迅速获得了市场的认可。此后,Excelta逐渐在连接器领域崭露头角。

Gore公司的发展小趣事
由于采用了三电平技术,功率开关管所承受的电压是直流母线电压的一半,从而降低了开关管的耐压等级。
Hartmann Codier GmbH公司的发展小趣事
在电力系统中,三电平直流变换器可用于直流输电、电力电子变压器等领域,提高电网的稳定性和效率。
Able Systems公司的发展小趣事

在追求经济效益的同时,Able Systems公司也注重履行企业社会责任。公司积极参与公益事业,关注环境保护和可持续发展。通过采用环保材料、推广节能技术等措施,公司努力降低生产过程中的能耗和排放。同时,公司还关注员工福利和职业发展,为员工提供良好的工作环境和培训机会。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。

请注意,以上内容仅为概述性质,并非基于Able Systems公司的实际发展历程。如需了解更多关于Able Systems公司的故事,建议查阅相关新闻报道、公司年报等官方资料。

问答坊 | AI 解惑

数字电视标准之争:市场说了算

 持续了六年的数字电视地面传输标准之争终于尘埃落定。曾经水火不相容的清华、上交大、广科院三个标准方案最终将以集合各自特色技术的“融合标准”方案面世。但是,这并不意味着三方都能成为最终标准的获益者,因为标准必须经历一年试用期,届 ...…

查看全部问答>

Protel DXP2004教程(原理图,PCB)下载

rotel DXP2004教程(原理图,PCB)下载 [ 本帖最后由 shuijian 于 2008-10-21 17:23 编辑 ]…

查看全部问答>

青越锋--PCB设计软件菜单注释

File--> New  (Ctrl+N):新建原理图文件           Open  (Ctrl+O):打开已有一个原理图文件           Close (Ctrl+F4):关闭已打开的某一个原理图   & ...…

查看全部问答>

分享一个毕业设计《可编程霓虹灯图形动态广告控制器的设计》

可编程霓虹灯图形动态广告控制器的设计 摘要 本文结合国内外霓虹灯控制技术的发展状况设计了一种采用美国ATMEL公司生产的AVR系列单片机中的ATmega8作控制芯片的霓虹灯控制器.通过ATmega8芯片控制驱动电路,在由驱动电路驱动继电器,而继电器则作 ...…

查看全部问答>

晶闸管调压不稳的问题

用热电偶测温,经单片机pid调节,触发固态继电器实现线性升温 但当电网电压变化时,升温曲线不稳定,很不线性 原因到底出在哪里呢,高次谐波?继电器?pid参数?还是其它因素,希望大家各抒己见,十分希望能得到各位的帮助,谢谢!…

查看全部问答>

水尺计重软件,无线打印

我想在pda上实现水尺计重软件,也想用无线打印,不知道怎么实现pda的无线打印啊…

查看全部问答>

帮忙给我指点一下啊...急啊

我发过两篇了..但是一直都没人解答 我自己这样写了一段  你们给看看对吗 DSP有4个字节一个一个的往SPI上发送.然后与SPI上已计算出的一个字节进行比较 unsigned Rev_data(unsigned flag_msb)//这是一个接收返回函数,有关硬件的 { } ...…

查看全部问答>

2011电子设计大赛元件清单公布啦~

本帖最后由 paulhyde 于 2014-9-15 09:47 编辑 http://www.nuedc.com.cn/news.asp?bid=5&sid=20&id=631  …

查看全部问答>

STM32F103Z的AD采样寄存器为什么没有符号位!如何测量负电压!

STM32的内部AD,是12位的,板子上是有个电位器,是从0伏到3.28V。   采样的电压值是 0x0000-0x0fff   但是有个问题,怎么内部的AD采样值没有符号位呢,那怎么去测量负电压!…

查看全部问答>

【玩转ADuCM360】带个LCD --- VG-240-R01LCM(VG5188)

这个LCD型号是VG-240-R01LCM(VG5188),驱动芯片是R61503B 网上关于这个芯片的初始代码很少,昨天搞了一下,没有反应。今天继续! …

查看全部问答>