你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32 keil软件工具--工程目标选项配置(下)

[复制链接]
STMCU小助手 发布时间:2022-6-19 21:00
Ⅰ、写在前面

本文接着上一篇文章“工程目标选项配置(Ⅰ)”进行讲述工程目标选项中后五项的配置,也就是C/C++、Asm、Linker、Debug、Utilities这五项配置的具体内容。

对于工程目标选项中的C/C++选项,不管是初学者,还是资深的软件工程师都非常重要。初学者要掌握包含路径、预定义等常规功能。资深软件工程师对代码性能有很高要求,就需要掌握代码优化等各项配置。

) I- O+ [% P4 H8 ~# u2 H! F

Ⅱ、C/C++选项

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

2 p9 m+ ?% j" e: X; o. I

20161111180844493.png

: q+ N) N; B0 Z8 E  R- X; _; y; h

第1处:预处理(Preprocessor Symbols)

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


% T8 H- P" c7 d# {

第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等。

8 S- k3 o$ h* v; H

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

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


: G9 a/ d1 T, U' f

20161111181225867.gif

0 h( ^+ J( h0 Z8 e' N6 a' R

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

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

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

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

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

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


& t! X& j. K# m" u6 U' P

Ⅲ、Asm选项

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


. z- L3 y( _/ X  K5 U

20161111181241495.png

' ]5 a: d' i# U. ?8 u$ R  ~

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

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

0 T0 i7 g) b1 @0 e, z1 J" l

第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:不自动添加头文件(一般不勾选)。

6 n3 N/ Z; A$ d4 Y/ ?

Ⅳ、Linker选项

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

  J) [5 a5 u7 ^

20161111181252402.png

# x+ Y* c. Q2 q# B, K- v" E* G; v

第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段独立。


% N9 n4 g+ D( y3 _0 i8 i0 w0 [

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

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

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

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

( U1 o/ s: g2 J+ S6 p% X* t9 X

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

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

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


* [4 B( e: J4 o! C8 s

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

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

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


, ?# A: M& G) X( N1 y  c6 h* K4 Z

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

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


) j1 [- G5 k7 [( l) T" ^3 W. Q

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

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

1 x3 L" u, P5 ~! R: A1 d

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

disable Warnings:警用警告。


2 _- J+ U1 O  g: r( u0 A

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

# ?/ B. s. }. `0 A+ m

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

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


2 f/ V$ p/ P0 r* k$ H2 V# I3 e

20161111181331261.png


# G* j2 |$ m) B( _) i+ C! @

Ⅴ、Debug选项

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

# N4 E* K+ |/ o" U3 P# p+ q, z" w

20161111181343262.png


/ m  b  B) p- ~

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

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


( j( r5 N6 K+ l' ^6 \8 {; `4 l

20161111181353854.png

) f- ?# c1 w: }

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

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

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

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

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

这里在某些情况下可以使用,比如:在RAM中调试代码。


3 P: y  h! \! i3 A! @

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

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


4 I+ \* B, S( [# g! U3 {

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

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

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

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

- ^  [1 ?1 {2 \0 m

/ G, E  \! m! R' m第5处:管理组件描述文件

Manage Component Viewer Description Files

这里一般不用去管理。

5 i7 b2 ^7 X  J

Ⅵ、Utilities选项

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


" G0 p! L; v, a" E# t+ k, S

20161111181410370.png


% b$ b' b3 U* u5 A# r. g. G

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

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

Use Debug Driver:使用调试驱动。

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

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

Setting:设置。

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

; z! O1 R3 O$ n8 H3 _! u1 d

20161111181419340.png


! V, R* f& B( {

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

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


/ Y8 g$ w  C. |9 R0 z: \: |, d
收藏 1 评论0 发布时间:2022-6-19 21:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版