MDK5简介

MDK 源自德国的 KEIL 公司,是 RealView MDK 的简称。MDK5 由两个部分组成:MDK Core 和 Software Packs。其中,Software Packs 可以独立于工具链进行新芯片支持和中间库的升级。MDK Core 又分成四个部分:uVision IDE with Editor(编辑器),ARM C/C++ Compiler(编译器),Pack Installer(包安装器),uVision Debugger with Trace(调试跟踪器)
Software Packs(包安装器)又分为:Device(芯片支持),CMSIS(ARM Cortex 微控制器软件接口标准)和 Mdidleware(中间库)三个小部分,通过包安装器,我们可以安装最新的组件,从而支持新的器件、提供新的设备驱动库以及最新例程等,加速产品开发进度。


提示:以下是本篇文章正文内容,下面案例可供参考

1.Device设备

根据实际使用的芯片类型选择选择安装对应型号的器件pack,(新建工程的第一步就是选择device) 比如这里选择的是:STMicroelectronics/STM32F1 Series/STM32F103/STM32F103VE。器件可以通过搜索查找也可以通过列表查找。
请添加图片描述
具体的software component 在Manage Run-Time Environment对话框可以看到:点击在这里插入图片描述在这里插入图片描述

2.Target目标

从内容可以看得出来是工程目标的调试晶振频率、选择的编译器、RAM和ROM分配的地址空间等
请添加图片描述
第1处:晶振频率
这个值主要用于仿真调试用,使用硬件调试则是根据实际的使用频率。

第2处:操作系统
是否选择Keil自带的RTX操作系统,一般都不选。

第3处:系统预览文件
这里是根据前面选择的device自动确定的对应芯片的svd文件,这个文件一般在安装目录下,如果想要更改就勾选Use Custom SVD File再选择文件所在目录。System Viewer功能是用来仿真时观察和修改芯片的在外设寄存器用的,它按芯片厂家的手册直接列出所有寄存器的位和功能指示。在仿真过程中可以修改和查看

第4处:使用交叉模块优化、使用微库microLIB
跨模块优化:使能链接器反馈文件,从而能够更深层次的代码优化。一般不使用
微库:是缺省的C库,而且microLIB进行了高度优化。如果不勾选“Use MicroLIB”,keil会连接标准C库。所以勾选“Use MicroLIB”会减小code大小。它不完全兼容ANSI,但已能满足大多数的应用。

第5处:ROM/RAM存储地址
这里的ROM存储指的是程序储存的地址,分片外和片内两种。
程序存储在片内好理解(初学者一般下载程序都是下载到片内FLASH),片外存储程序对于初学者来说比较少见,一般都是项目做大了,或有特殊要求时,片内不够使用了才将程序存储在片外

3.Output输出

输出一系列相关的内容。输出类型二选一:
1.输出可执行文件 Create Executable,也就是我们下载到处理器里面的程序;
2.输出库 Create Library,
请添加图片描述
Select folder for objects:选择存放编译过程中产生的过程文件的目录
Name of executable:可执行文件名称

输出可执行文件
输出这些信息都很费时间,如果都不勾选这些选项,编译速度会很快。
Debug Infomation:输出调试信息。勾选上这个选项,才可以进行调试。
Create HEX File:输出可执行Hex文件,
Browse Information:输出浏览信息。勾选上这个才能使用go to definition of这个功能。

4.Listing列表

生成列表相关的选项,对代码分析比较透彻的工程师就需要了解这个选项。常见的就是map地址的分布,就是在这里配置生成的的。
请添加图片描述
第1处:输出路径、宽高
选择列表文件输出的文件夹。可设置文件页面的宽度,长宽

第2处:输出汇编列表
勾选上会输出汇编列表信息(产生后缀为 .lst的文件)。如果工程中没汇编文件,则不会输出信息。这个文件包含了有关编译过程的很多信息,比如编译器版本号、源文件名称,由C语言程序编译产生的汇编代码,以及编译过程中产生的错误、警告信息,这些信息和编译时屏幕显示的提示信息相同。

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

第4处:链接列表
可选择生成或禁止生成.map文件。可设置生成代码的详细信息。可选择性的选取输出MAP文件。map文件是通过编译器编译之后,集程序、数据及IO空间的一种映射文件。在遇到内存越界,或溢出的情况时,可以分析map文件。通过map文件可以知道函数大小,入口地址等一些重要信息。
Memory Map:内存映射
Callgraph:图像映射
Symbols:符号
Cross Reference:交叉引用
Size Info:大小信息
Totals Info:统计信息
Unused Section Info:未调用模块信息
Veneers Info:装饰信息

5.User用户选项

这个选项是针对用户而设计的,一般不常用,方便用户执行一些程序。**可以选中exe文件,也可以使用fromelf.exe工具生成目标(bin,hex等)文件。(创建BIN:勾选Run #1,同时在其对应的User Command文本框中输入 fromelf --bin --output=@L.bin !L 编译后就会输出BIN文件)。**比如:编译完代码之后,我要将生成的Hex文件拷贝到其它地方。上面说的用户程序,勾选上DOS16,可以“DOS16模式”运行。
请添加图片描述
Before Compile C/C++ File: 编译c文件之前
Before Build:编译之前
After Build/Rebuild:编译之后

注:Compile:只编译选定的目标,可以是单个文件,不管之前是否已经编译过,在这个过程中检查语法错误。但并不生成可执行文件
Build:只编译工程中上次修改的文件及其它依赖于这些修改过的文件的模块,同时重新链接生成可执行文件。如果工程之前没编译链接过,它会直接调用Rebuild All。另外在技术文档中,Build实际上是指increase build,即增量编译。
Rebuild:不管工程的文件有没有编译过,会对工程中所有文件重新进行编译生成可执行文件,因此时间较长。

6.C/C++选项

请添加图片描述

1.预处理(Preprocessor Symbols):这里主要就是预定义功能,相当于程序中的#define xxxx。我上面预定义STM32F10X_HD,在stm32f10x.h文件中“#ifdef STM32F10X_HD”就可以判定为true了。

2.语言代码生成(Language / Code Generation):编译,链接到最后生成代码,编译优化

[Execute only Code设置编译器命令行]:只生成执行代码,防止编译器生成任何数据访问代码部分。
[Optimize代码优化]:有Level0 - Level3四个选项,初学者、在线调试建议使用Level0,也就是不优化,这样执行的效果才和代码一样。如果配置成Level3,在线调试可能有些地方优化而不能打断点。
[Optimize for Time优化时间]:即优化代码中费时的地方,比如有些算法,本身代码量就比较大,运行需要很长时间(假如需要2秒),这个时候勾选上该功能,会发现运行时间有比较明显的减少(或许不到1秒时间)。
[Split Load and Store Multiple]:加载和存储多个分裂,非对齐数据采用多次访问方式。当 LMD/STM 指令有 4 个以上产生时,列分裂LMD 和 STM 指令,以减不中断延迟。
LDM:(load much)多数据加载,将地址上的值加载到寄存器上
STM:(store much)多数据存储,将寄存器的值存到地址上
[One ELF Section per Function]:优化每一个函数 ELF 段(建议都勾选上),每个函数都会产生一个 ELF 段,勾选上,允许优化每一个 ELF 段,最会将需要的函数链接成一个大的ELF文件。但是如果没有勾选,Keil将每个文件编译成一个ELF文件(即使文件中用未被使用的函数),最会链接成一个ELF文件。所以勾选会使code变小。
这个选项可以减少潜在的共享地址、数据和函数之间的字符串。
[strict ANSI C]:编译时严格按照标准的ANSI C进行检查。
[Enum Container always int]:枚举总是int型
[enum_is_int]:枚举时成员变量类型为int型。
[Plain Char is Signed]:纯字符标记为字符
[Read-Only Position Independent]:为常量生成独立的代码空间。我们定义字库变量为常量,勾选该选项,会将这些字库变量放在独立的代码空间。
[Read-Write Position Independent]:为可读写代码生成独立的代码空间。
[Warnings]:警告
No Warnings:不会有警告提示和输出;
All Warnings:所有警告提示和输出。
Thumb Mode:Thumb模式。
No Auto Includes:不自动添加头文件,不勾选该选项,编译器就会在Keil安装路径寻找你工程中.h文件。
举例:我们定义uint8_t是定义在stdint.h文件里面的,但是我们工程目录下一般是没有stdint.h文件。这时候,编译器就会在Keil路径下去寻找stdint.h文件。
C99 Mode:C99标准模式。(C语音有标准有多个版本,如C89、C90、C99等)

3.include path包含路径:指定工程中使用的h文件的存放位置,让编译器找到对应的文件

4.多功能控件Misc Controls:指定没有单独的对话框控件

5.编译器控制字符串Compiler control string:编译器执行的命名,显示当前在编译器命令行指令。

7.Asm汇编选项

请添加图片描述
有条件的装配控制符号(Conditional Assembly Control Symbols):指定汇编条件,这里类似C/C++中的预处理。
语言代码生成(Language / Code Generation)和C/C++中类似

8.Linker链接配置选项

可以修改、编辑和查看链接的文件。
请添加图片描述
第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…”查看和编辑对应的文件。

后面两个和C/C++选项一样。

9.Debug选项

主要用于软件仿真或者硬件调试的设置,选择use Simulator或者use J-LINK,下面的设置都是一样的
请添加图片描述

DLL文件属于Keil自身的配置,最好不要修改。
CPU/Driver DLL - Parameter:CPU驱动文件和参数
Dialog DLL - Parameter:会话框DLL文件和参数

10.Utilities选项

请添加图片描述
第1处:配置FLASH菜单命名(Configure Flash Menu Command)
这里是二选一选项,一般我们使用上面的“Update Target Driver for Flash Programming”列表选择和调试接口一致的驱动。

Use Debug Driver:使用调试驱动
Update Target Before Debugging:调试之前更新目标
一般都勾选上,因为我们下载程序之前检测到代码修改了,就会重新编译程序(也就是更新目标)

参考链接:https://blog.csdn.net/ybhuangfugui/article/details/51655502
https://strongerhuang.blog.csdn.net/article/details/53131141?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-53131141-blog-122755745.235%5Ev32%5Epc_relevant_increate_t0_download_v2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-53131141-blog-122755745.235%5Ev32%5Epc_relevant_increate_t0_download_v2&utm_relevant_index=5

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐