搜档网
当前位置:搜档网 › MDK使用手册

MDK使用手册

MDK 使用手册设计手册V1.0

设计:陈吏弘

时间:2012.06.01

目录

一、序 (3)

二、MDK支持平台 (3)

三、MDK工程创建介绍 (3)

3.1、创建一个工程Test (5)

3.2、工程配置 (11)

四、MDK加Ulink2调试 (25)

五、MDK实现RAM调试 (31)

一、序

给予ARM的开发会越来越多,这个过程也会有越来越多的工程师需要学习相关的技术知识,这里主要是列出MDK使用的一些实践操作,为新用户认识和使用MDK提供一个参考手册,其实在MDK 自带的帮助文档里也是有相当多的介绍资料,建议用户在使用过程遇到问题是可以考虑阅读MDK自带的帮助文档。

二、MDK支持平台

MDK是Keil For ARM的软件集成开发环境,对于习惯使用集成开发环境的工程师,MDK的集成开发环境还是挺友好的,不过本人建议软件开发如果条件合适还是使用gmake更为灵活。

MDK主要是针对ARM7、ARM9、Cortex-M系列的处理器,如果你选择的是更为高端的处理器,那么请使用其它编译器,例如ARM 公司提供的专业编译器,当然还有很多第三方的工具。

三、MDK工程创建介绍

下面以一个实际操作的例子,来创建一个工程,如下图是打开的MDK软件截图。

如果你是初次打开MDK,那么通常工程中会打开一个示例工程,这个你可以把它关闭,关闭的方法是菜单Project->Close Project就可以了。

工程管理

编辑窗口

编译输出

工程管理窗口,如果你打开的环境中没有,那么可以在菜单View->Project Windows打开,这里还可以打开Books、functions、Templates窗口。这几个窗口共用一个视窗,所以如果要查看不同的内容可以在下面点选切换,如图中红圈部分。

编辑窗口,这个窗口当你双击你的源代码文件时,就会打开显示,并且可以再这里编辑你的源代码,当然如果你有其它更好的编辑工具也可以不在这里编辑。

编译输出窗口,这个窗口可以显示编译过程的信息,例如编译当前状态、警告信息、错误信息、代码量、数据量等等。如果你的环境没有输出窗口,那么仍然可以在菜单View->Build Out Windows打开。

MDK工具打开的工作环境大概是这样子。

这里补充说一点关于Templates的使用问题,实际上可能很多的工程师都没有去关注或者真真去使用Templates,那么这是一个什么

东西呢?其实这是一个非常好的工具,虽然它还不是很强大,当确实还是挺有用的,它可以让你轻松的实现设计代码复用,而且是快速的复用,你可以把一些设计代码作为一个Templates,在你新的工程中需要使用的时候就可以快速的调入,这个调入是把你的代码完成的拷贝到你的代码文件中,而不是一种引用。不过我没有发现这些Templates是存放在那些位置的,这样对管理来说还不是很好,但是对于个人来说已经很不错了。(不适用版本管理、所以在公司适用,版本变动可能就会有版本不同意的问题,管理版本统一比较麻烦)。

3.1、创建一个工程Test

创建工程,在菜单Project->New uVersion Project…然后弹出的对话框需要你输入工程的名称,如下图:

工程名称我们就输入Test,然后保存,如果你的当前路径下已经存在一个这样的工程,那么它会提示你是否替换原有的工程。保存完之后会弹出一个新的设备选择对话框,如下图:

这里需要你选择你这个工程使用的是那一款芯片,在MDK中基本上所有的芯片都已经列出,你可以直接根据公司进行选择你需要的芯片型号。如果你使用的芯片型号非常新,那么有可能在列表中,没有,如果是这样你还可以通过选择类似的型号或者直接选择ARM公司下的ARM、Cortex-M内核型号,这样也是可以的。

这里示例选择STM32F103C4型号,选择之后,接着会提示你是否需要拷贝启动代码,如下图:

建议拷贝,这样你就不需要自己去设计这部分启动代码了,当然这里的启动代码可能不是你需要的,但是你还是可以自行根据实际使用情况进行修改。如果在你当前路径下,这个文件已经存在,那么还会提示你是否覆盖。之后工程就创建完成了,如下所示。

创建工程的一级目录是Target 1,二级目录是Source Group 1,这两个目录都是自动创建的,名称的修改,选择按F2就可以修改了,另外还可以添加新的二级目录,但是在MDK中仅仅支持二级目录,所以如果你的目录树比较深建议你使用gmake工具,或者调整目录级别。

下面我们就这个创建的工程进行编译,看看结果是什么,这里我

们可什么都没有修改。

编译方法

1.通过菜单Project->Bulid target 或者Rebuild all target files来实

2.选择工程,右键,在弹出的菜单中选择Rebuild all target files

或者Build target实现

对刚创建的工程编译后,输出信息如下:

图中编译时有一个警告和错误,警告可以先不管,我们先看错误,错误内容如下:

Test.axf: Error: L6411E: No compatible library exists with a definition of startup symbol __main.

这个错误中有一个__main符号,所以,不用想多,这个错误就是在你的工程中没有main函数。因为C程序的入口是main函数,没有main函数显然就不是一个完成的程序,所以接下来在工程中添加一个c文件,完善main函数,新建文件在菜单File->New…,这个时候右边的编辑框就可以正常编辑了,输入如下代码:

#include “stdio.h”

Int main()

{

Printf(“你好!\n”);

Return 0;

}

然后把文件保存为Test.c。

选中工程中的二级目录,右键,弹出的菜单中选中添加文件到目录中,如下图:

添加完Test.c到工程后,我们再次编译工程,这是输出信息如下:

提示中还有一个错误,这个错误是说在startup_stm32f10x_ld.o文件中用到SystemInit符号,但是这个符号没有定义。所以打开startup_stm32f10x_ld.s文件,找到使用这个符号的代码,如下:Reset_Handler PROC

EXPORT Reset_Handler [WEAK]

IMPORT __main

IMPORT SystemInit

LDR R0, =SystemInit

BLX R0

LDR R0, =__main

BX R0

ENDP

这里确实有使用到SystemInit符号,怎么办,简单的办法就是把这两条指令删除,或者你指定在C文件中定义一个符号(函数)。

这里我们就在Test.c中建一个空函数

V oid SystemInit(void)

{

}

然后再次编译,这是输出内容如下:

终于看到:

Program Size: Code=3196 Ro-data=280 RW-data=12 ZI-data=1876 “Test.axf” - 0 Error(s), 0 Waring(s).

到这里我们的工程创建、编译整个就已经完成了,接下来C代码的设计问题就是工程师们仁者见仁,智者见智的事情了。

3.2、工程配置

前一节完成了整个工程的创建以及编译,但是我们都是采用默认的配置,这样肯定不能够满足我们自主的愿望,所以对于工程的配置摆上了我们的桌面,下面一起看看如何对我们创建的工程进行配置。

打开配置菜单,有两种方法:

1.在菜单project->Option for Target ‘Target 1’…

2.选择工程,右键,快捷菜单中选择Option for target ‘Target 1’…

弹出配置向导如下图所示:

在这个配置向导中,有很多子选项,列举如下:

Device、Target、Output、listing、User、C\C++、Asm、Linker、Debug、Utilities。Q其中Device在我们创建工程时选择芯片型号的时候已经设定过,所以弹出这个向导时默认选择的是Target。当然这里你也是可以重新选择Device即芯片型号。

Target选项卡

在Target选项卡里可以配置以下内容,分别是:

设定晶体时钟

设定是否使用操作系统如MDK自带的RTX

设定系统显示内容存放文件路径及名称,这个不太清楚用法,默认的存放文件可以在安装路径下找到,但是不是文本文件没有详细研究,我们可以使用默认配置。

设定使用交叉优化模式

设定使用微库,默认是标准库,标准库与微库是有区别的,用户可以自行选择。

最后就是定义片内与片外的ROM和RAM,选择型号的时候,片内的ROM与RAM都已经定义好,通常并不需要用户再次定义配置。

Output选项卡

Output选项卡可以配置以下内容,分别是

设定目标存放路径

指定生成可执行文件名

指定是否生成调试信息

指定是否生成hex文件

指定是否产生browse信息,这个在debug的时候,打开source browse windows需要这项选择

指定是否创建批处理文件

指定是否生成lib文件

Listing 选项卡

Listing选项卡可以配置以下内容,分别是:

设定存放路径

指定输出页宽度、长度

指定生成汇编.lst信息,同时指定是否包含交叉参考信息

可以指定是否生成C预处理信息

指定是否生成链接信息,同时可以选择是否包含存储映射、符号、调用层次关系、交叉参考信息、Size信息、总体信息、未使用Sections

信息、Veneers信息

User选项卡

用户选项卡,主要是用来实现用户在编译器工作前后做的一些事情,这里都是指定运行一些程序,这样可以实现一些代码设计传递时的保护机制,这里不做太多介绍。

C\C++选项卡

C|C++选项卡可以配置以下内容,分别是:

预处理符号定义(建议不要在工程中使用这些定义)语言及代码编译参数定义

优化级别

优化时间与空间的选择

指定非对齐数据采用多次访问

指定为每个函数生成一个独立的section

指定使用标准ANSI C语法

指定枚举类型总是整形

指定字符型默认是带符号的

指定只读部分是位置无关

指定读写部分时位置无关

指定警告输出,可以使不输出也可以全部输出,或者采用默认设置

指定包含的路径

其它编译参数输出栏

此外,所有的配置,都在最下面框框中显示出来,这样你可以看到实际在编译时使用的参数情况。

Asm选项卡

汇编选项卡与C\C++选项卡类似,不过汇编选项卡会简单很多,可以配置内容如下:

条件汇编符号定义

语言及代码编译参数定义

只读部分位置无关

读写部分位置无关

指定为Thumb指令

指定没有警告输出

指定非对齐数据采用多次访问

指定包含路径

指定其它编译参数

此外,这里所有实际执行时使用的参数会在最下面的框框中显示。

Linker选项卡

该选项卡可以配置的以下内容,分别是:

存储使用配置

生成读写部分位置无关

生成只读部分位置无关

禁止使用标准库

报告可能的条件错误

在使用连续存储块是,还需要指定只读基地址和读写基地址,不过这两个基地址在芯片选型就一定定义好了,如果你的平台没有不同的地方就不用修改了。

指定禁止某类型的警告

指定使用分散描述文件

指定其它链接参数

同样,所有在执行会使用的参数都会在最下面的框框中显示出来,方便用户校验。

Debug选项卡

该选项卡是用来配置调试的,调试有两种,一种是基于软件的模拟调试,另一种是通过仿真器在线调试。如下图:

A、软件模拟调试配置

使用软件模拟调试通常可以实现下面的配置,分别是:

指定速度限制在实际的运行时钟

启动时加载应用程序

启动时运行到main函数入口

指定初始化脚本

调试操作相关设置

支持断点设置

支持Toolbox工能

支持Watch窗口和性能分析

支持内存显示

其它的PC端的动态库配置就可以不用关注了。

B、仿真器调试配置

如果要使用仿真器在线调试,那么要先选择使用仿真器,MDK 工具可以支持的仿真器非常的多,示例中如图支持集成支持的仿真器,还有一些第三方的工具。

相关主题