KEIL工程目标选项配置

打开目标选项的两种方法

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”,如下图:


 

  • 6
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
理清了对象关系之后,让我们接着来进行数据库的设计。在数据库建模时,对于N对N的 关系,一般需要加入一个关联表来表示关联的两者的关系。初步估计一下,本系统至少 需要十张表,分别为:权限表、用户表、角色表、组表、用户权限关联表、用 户角色关联表、角色权限关联表、组权限关联表、组角色关联表、用户属组关联表。当 然还可能引出一些相关的表。下面让我们在PowerDesigner中画出各表吧。    各表及其关系如下:       1.    用户表 "  用户表(TUser) " "  字段名称 "  字段 "  类型 "  备注 " "  记录标识 "  tu_id "  bigint "  pk, not " " " " "null " "  所属组织 "  to_id "  bigint "  fk, not " " " " "null " "  登录帐号 "  login_name "  varchar("  not null " " " "64) " " "  用户密码 "  password "  varchar("  not null " " " "64) " " "  用户姓名 "  vsername "  varchar("  not null " " " "64) " " "  手机号 "  mobile "  varchar(" " " " "20) " " "  电子邮箱 "  email "  varchar(" " " " "64) " " "  创建时间 "  gen_time "  datetime"  not null " "  登录时间 "  login_time "  datetime" " "  上次登录时"  last_login_"  datetime" " "间 "time " " " "  登录次数 "  count "  bigint "  not null "   2.    角色表 "  角色表(TRole) " "  字段名称 "  字段 "  类型 "  备注 " "  角色ID "  tr_id "  bigint "  pk, not " " " " "null " "  父级角色I"  parent_tr"  bigint "  not null " "D "_id " " " "  角色名称 "  role_name"  varchar(6"  not null " " " "4) " " "  创建时间 "  gen_time "  datetime "  not null " "  角色描述 "  descripti"  varchar(2" " " "on "00) " "   3.    权限表 "  权限表(TRight) " "  字段名"  字段 "  类型 "  备注 " "称 " " " " "  权限ID"  tr_id "  bigint "  pk, not " " " " "null " "  父权限"  parent_tr"  bigint "  not null " " "_id " " " "  权限名"  right_nam"  varchar(6"  not null " "称 "e "4) " " "  权限描"  descripti"  varchar(2" " "述 "on "00) " "   4.    组表 "  组表(TGroup) " "  字段名"  字段 "  类型 "  备注 " "称 " " " " "  组ID "  tg_id "  bigint "  pk, not " " " " "null " "  组名称"  group_nam"  varchar(6"  not null " " "e "4) " " "  父组 "  parent_tg"  bigint "  not null " " "_id " " " "  创建时"  gen_time "  datetime "  not null " "间 " " " " "  组描述"  descripti"  varchar(2" " " "on "00) " "   5.    角色权限表 "  角色权限表(TRoleRightRelation) " "  字段名"  字段 "  类型"  备注 " "称 " " " " "  记录标"  trr_id "  bigi"  pk, not null " "识 " "nt " " "  角色 "  Role_id"  bigi"  fk, not null " " " "nt " " "  权限 "  right_i"  bigi"  fk, not null " " "d "nt " " "  权限

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值