在keil mdk 中调试 一、...

12
Keil MDK 中调试 AT91SAM9260 ...................................... 2 一、 初识 Keil MDK ......................................................... 2 二、 在内部 RAM 中调试................................................. 3 三、 在片外的 SDRAM 中调试........................................ 7 四、 Norflash 启动运行................................................ 8 五、 Norflash 启动,最终运行在 SDRAM .......... 10 Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only.

Upload: others

Post on 03-Jun-2020

33 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 在Keil MDK 中调试 一、 初识bbs.21ic.com/upfiles/img/20093/2009324225254681.pdf一、初识Keil MDK 使用Keil 开发过51 的肯定对Keil 不陌生,而且很多资料上都介绍了怎么新

在 Keil MDK中调试 AT91SAM9260...................................... 2

一、 初识 Keil MDK ......................................................... 2

二、 在内部 RAM中调试................................................. 3

三、 在片外的 SDRAM中调试........................................ 7

四、 从 Norflash启动运行................................................ 8

五、 从 Norflash启动,最终运行在 SDRAM中 .......... 10

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 2: 在Keil MDK 中调试 一、 初识bbs.21ic.com/upfiles/img/20093/2009324225254681.pdf一、初识Keil MDK 使用Keil 开发过51 的肯定对Keil 不陌生,而且很多资料上都介绍了怎么新

在 Keil MDK中调试 AT91SAM9260

我们板子的配置是 at91sam9260+Norflash+SRAM,而一般 9260 外扩的都是

SDRAM,所以后来我又写了个 SDRAM的例程,运行在我们的开发板上。所以

我们的硬件环境是:

编译工具:Keil MDK3.22a;

ARM:at91sam9260;

Norflash:sst39vf1601,2Mbytes,地址:0X10000000~0X101FFFFF;

SDRAM:Hy57V561620*2,64Mbytes,地址:0X20000000~0X23FFFFFF;

一、初识 Keil MDK

使用 Keil开发过 51的肯定对 Keil不陌生,而且很多资料上都介绍了怎么新

建一个项目,所以我就不多说了,主要说一下 Keil中对 ARM开发很方便的一个

地方:Components、Environment、Books⋯⋯,新建一个 project 后,点击

Project/Manage,再点击 Components、Environment、Books⋯⋯,或者直接点击

工具栏中的三种颜色的品字形标志。

图 1-1 打开 Components、Environment、Books⋯⋯

打开之后是图 1-2所示,我们主要使用第一项 Project Components。由于 ARM

启动方式多种多样,还可以在片内或片外 RAM 调试,而不同的方式对应的

target/Options 选项也不同,所以我们可以根据调试环境的不同,建立不同的

Target。

图 1-2 Project Components

我们 At91sam9260的板子,既可以在内部 RAM调试,也可以在外部 SDRAM

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 3: 在Keil MDK 中调试 一、 初识bbs.21ic.com/upfiles/img/20093/2009324225254681.pdf一、初识Keil MDK 使用Keil 开发过51 的肯定对Keil 不陌生,而且很多资料上都介绍了怎么新

调试,既可以从 Norflash启动运行在 Flash中,也可以从 Norflash启动并将代码

拷贝到 SDRAM 中运行,所以我们可以通过图 1-1 所示的编辑工具,建立四个

Target,如图 1-3所示:

图 1-3 建立 Target

然后在Keil的工具栏中就可以通过点击下拉框来选择不同的 Target,如图 1-4

所示:

图 1-4 选择 Target

这几种不同的 Target,使用的文件都是一样的,只是每个 Target 的 Options

不同,这样我们就可以在同一个 Keil工程下实现 ARM的各种调试环境。

下面我们将分别介绍各个 Target 中 Options的设置,从而实现不同的运行环

境。

二、在内部 RAM中调试

首先点击图 1-4 中的”SAM9260 Int RAM”,然后在 Workspace 中右键点击

SAM9260 Int RAM,打开 Options对话框,如图 2-1所示:

图 2-1 打开 Options

打开 Options后,如图 2-2所示:

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 4: 在Keil MDK 中调试 一、 初识bbs.21ic.com/upfiles/img/20093/2009324225254681.pdf一、初识Keil MDK 使用Keil 开发过51 的肯定对Keil 不陌生,而且很多资料上都介绍了怎么新

图 2-2 Options

在 Target页面主要设置存储器的配置,在内部 RAM调试的话,ROM的地址

和 RAM的地址都要设为内部 RAM的地址,而当 BMS接高时,REMAP后,内

部 RAM 的 SRAM0 被映射为 0 地址,所以此时 ROM 地址填 0x0 和 0X200000

都是一样的,此时访问到的都是内部的 SRAM0。

Output 和 Listing 用来设置调试信息和输出文件的存放目录,可在项目目录

下新建一个文件夹,命名为 Int RAM。

User 对话框用来设置编译前后要运行的命令行,比如说将 AXF 格式文件转

化为 Bin格式文件,在 RAM 中调试使用默认输出的 AXF 文件,所以此时不用

设置。

C/C++和 ASM 对话框分别用来设置 C 程序和汇编程序中的调试定义,以及

所包含的头文件目录。如图 2-3所示,Define行定义了 NOFPUT,这是因为我们

使用的 Dbgu.C中有如下语句:

#ifndef NOFPUT

#include <stdio.h>

⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯

⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯

#endif //#ifndef NOFPUT

其中是自定义 Printf()所需的一些函数,而我们使用的 Printf()是通过在

Retarget.C中自定义 sendchar()实现,所以不编译其中的语句。

另外,在下面的 Include paths中,要添加 C程序所有头文件即所有.H文件的

路径。也可通过点击浏览,然后添加。

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 5: 在Keil MDK 中调试 一、 初识bbs.21ic.com/upfiles/img/20093/2009324225254681.pdf一、初识Keil MDK 使用Keil 开发过51 的肯定对Keil 不陌生,而且很多资料上都介绍了怎么新

图 2-3 C/C++

图 2-4

Linker对话框中,我们直接选择”Use Memory Layout Target Dialog”,意思就是

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 6: 在Keil MDK 中调试 一、 初识bbs.21ic.com/upfiles/img/20093/2009324225254681.pdf一、初识Keil MDK 使用Keil 开发过51 的肯定对Keil 不陌生,而且很多资料上都介绍了怎么新

直接使用 Target对话框定义的存储器配置。当选择此项时,系统会自动生成一个

分散加载文件,就不再自己写分散加载文件了,否则要添加自己的分散加载文件。

Debug 对话框主要是设置仿真器、添加仿真初始化文件。我们使用 DB 的

Jlink,所以首先点击右侧的 Use硬件仿真器,选择 RDI Interface Driver,然后点

击 Setting,添加 Jlink的配置文件。如图 2-5所示:

图 2-5 Jlink

然后添加初始化文件,初始化文件的作用就是初始化时钟、RAM,为硬件建

立一个启动环境,很多程序在 RAM中调试正常,而直接跑在 Flash就不对,此

时就要检查初始化文件所做的工作,在实际的程序中又没有做,我遇到了几次这

样的毛病,最后都检查出是实际的启动文件中忘记配置了什么东西。

一般初始化文件不用自己来写,改改例程中的就可以用了,需要注意的两个

地方:

1. 入口地址:

在内部 RAM调试时,Entry = 0x00000000;

在外部 SDRAM调试时,Entry = 0x20000000;

2. 下载 AXF文件时,路径和名字要修改,例如:

FUNC void Download (void) {

if (Setup & 0x20) {

// <s0.80> Command for Loading

exec("LOAD Int_RAM\\Blinky.axf INCREMENTAL");

}

Int_RAM\\Blinky.axf要相应地修改为 Output对话框定义的输出路径和名字。

至此,这个 Target的设置就完成了,点击”Build Target”,编译 Target,如果没有

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 7: 在Keil MDK 中调试 一、 初识bbs.21ic.com/upfiles/img/20093/2009324225254681.pdf一、初识Keil MDK 使用Keil 开发过51 的肯定对Keil 不陌生,而且很多资料上都介绍了怎么新

错误,如图 2-6,就可以将板子上电调试了。

图 2-6 Build OK

然后上电,点击工具栏上的 Debug按钮,进入仿真环境,如图 2-7所示,程

序运行在 SRAM0 地址中。接下来如何调试,单步或者全速与 51 没啥区别,就

不再说了。

图 2-7 Int RAM

三、在片外的 SDRAM中调试

在片外的 SDRAM调试与片内 RAM调试差别不大,主要是存储器地址范围

设置和调试初始化文件的区别:

图 3-1 SDRAM-Target

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 8: 在Keil MDK 中调试 一、 初识bbs.21ic.com/upfiles/img/20093/2009324225254681.pdf一、初识Keil MDK 使用Keil 开发过51 的肯定对Keil 不陌生,而且很多资料上都介绍了怎么新

在 SDRAM中调试,所以 ROM和 RAM的地址都要设置为 SDRAM的地址。

如上图 3-1所示。

初始化文件也要相应地改为外部 SDRAM调试的初始化文件,如图 3-2所示,

这个初始化文件与在内部 RAM调试的初始化文件相比,多了外部 SDRAM的初

始化,另外入口地址也要变为 SDRAM的地址。

图 3-2 SDRAM Debug

其他的都跟在内部 RAM中调试的一样设置,同样 Build,进入调试环境,发

现程序运行在 SDRAM地址中,如图 3-3所示:

图 3-3 SDRAM

四、从 Norflash启动运行

这里是指 ARM从 Norflash启动,程序一直运行在 Norflash中。首先要保证

你的启动代码没有问题,因为前面在 RAM中调试,系统的启动都是靠初始化文

件建立的,而这里要靠正确的启动代码。

同样需要修改的地方还是 Options,首先 Target处,ROM地址填 Norflash的

地址,RAM处填 SDRAM的地址,启动代码中一定要有 SDRAM的初始化部分。

然后 User处添加转为 Bin文件的命令。

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 9: 在Keil MDK 中调试 一、 初识bbs.21ic.com/upfiles/img/20093/2009324225254681.pdf一、初识Keil MDK 使用Keil 开发过51 的肯定对Keil 不陌生,而且很多资料上都介绍了怎么新

图 4-1 Norflash Target

图 4-2 Norflash User

另外 ASM处,添加启动代码中一些定义,RAM_INTVEC、REMAP将中断

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 10: 在Keil MDK 中调试 一、 初识bbs.21ic.com/upfiles/img/20093/2009324225254681.pdf一、初识Keil MDK 使用Keil 开发过51 的肯定对Keil 不陌生,而且很多资料上都介绍了怎么新

向量复制到内部 RAM,并将内部 RAM映射为 0x0地址。Linker处还是选择”Use

Memory Layout Form Target Dialog”。

图 4-3 Norflash ASM

接着,Build Target,无错误的话,打开生成的Map文件,会看到代码段都被

放置到 Norflash地址中,如图 4-4所示:

图 4-4 Norflash Map

然后将生成的 Bin文件用 Jflash或 h-flasher下载到 Norflash中,然后将 BMS

接低,上电后执行。

五、从 Norflash启动,最终运行在 SDRAM中

将程序从 Norflash拷贝至 SDRAM执行,本来可以在启动代码中添加代码拷

贝部分或者写两个程序实现,但是在 Keil 中,有两种更容易实现的方式,编译

器自动将所需的代码段拷贝至 RAM区,一是通过自定义的分散加载文件,二就

是接下来我们介绍的只点击鼠标的方式。第一种方法一直没能搞成功,还请搞过

的牛人指点。

这个 Target 与前面运行在 Norflash 中的 Options 完全一样,然后右键点击

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 11: 在Keil MDK 中调试 一、 初识bbs.21ic.com/upfiles/img/20093/2009324225254681.pdf一、初识Keil MDK 使用Keil 开发过51 的肯定对Keil 不陌生,而且很多资料上都介绍了怎么新

Source Code,打开其 Options,如图 5-1所示:

图 5-1 Source Options

然后在 properties/Memory Assignment中将其 Code/Const定位于 SDRAM中,

如图 5-2所示:

图 5-2 CODE SDRAM

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 12: 在Keil MDK 中调试 一、 初识bbs.21ic.com/upfiles/img/20093/2009324225254681.pdf一、初识Keil MDK 使用Keil 开发过51 的肯定对Keil 不陌生,而且很多资料上都介绍了怎么新

同理,再将其他需要放置到 SDRAM执行的程序,进行同样的操作,然后,

Build Target,无错误的话,查看生成的 Map 文件,发现这些代码段被放置在

SDRAM空间内了,如图 5-3所示:

图 5-3 SDRAM Map

至于使用分散加载文件的方式,我还没有试验出来,也请知道的大虾指点指

点,谢谢。

至此,使用 Keil 四种方式调试 at91sam9260的方法都介

绍完了,授之鱼不如授之渔,我主要说的是方法步骤,并没

有提供程序,自己从中摸索确实能学到很多东西,但是不要

像我走火入魔就行了。

本人也是第一次学习 ARM,以上如有不对的地方还请多

多指教。

风子(ch2003_23)

2009-3-24于深圳

QQ:277565600

MSN:[email protected]

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.