1、ARM 学 习 -RealView MDK+Jlink+TQ2440 调 试 笔 记2010 年 5 月 29 日 lzz 发表评论 阅读评论 调试环境软件:RealView MDK 4.03q硬件:JLINK v7,TQ2440 开发板刚开始学习 ARM 无 OS 编程的时候用的是天嵌的 TQ2440_Test 工程,它是 ads1.2 的工程,可是我用的是 windows7 的操作系统,ads1.2 比较老了在 windows7 下不太好使老是莫名奇妙的就崩了,弄的我很郁闷于是我就换了 RealView MDK,可是关于 RealView MDK 的教程网上很少(可能是用的人还不太多)经过
2、一个星期的学习大概熟悉了 RealView MDK 的环境,下面就记录下我的调试过程。1.RealView MDK 介绍2.Jlink 介绍3.创建 RealView MDK 的 led 跑马灯工程4.调试程序1.关于 RealView MDK其实 RealView MDK 也是 Keil 公司的产品,它是在 Keil 被 ARM 公司收购后开发的关于 arm 的新的开发环境,个人感觉它比 ads1.2 要好使的多。RealView MDK 有很多突出特点:启动代码生成向导,自动引导启动代码和系统硬件结合紧密,必须用汇编语言编写,因而成为许多工程师难以跨越多门槛。RealView MDK 的
3、Vision3工具可以帮您自动生成完善的启动代码,并提供图形化的窗口,随您轻松修改。无论对于初学者还是有经验的开发工程师,都能大大节省时间,提高开发效率。软件模拟器,完全脱离硬件的软件开发过程RealView MDK 的设备模拟器可以仿真整个目标硬件,包括快速指令集仿真、外部信号和 I/O仿真、中断过程仿真、片内所有外围设备仿真等。开发工程师在无硬件的情况下即可开始软件开发和调试,使软硬件开发同步进行,大大缩短开发周期。而一般的 ARM 开发工具仅提供指令集模拟器,只能支持 ARM 内核模拟调试。性能分析器,看得更远、看得更细、看得更清RealView MDK 的性能分析器好比哈雷望远镜,让您
4、看得更远和更准,它辅助您查看代码覆盖情况,程序运行时间,函数调用次数等高端控制功能,指导您轻松的进行代码优化,成为嵌入式开发高手。通常这些功能只有价值数千美元的昂贵的 Trace 工具才能提供。Cortex-M3 支持RealView MDK 支持的 Cortex-M3 核是 ARM 公司最新推出的针对微控制器应用的内核,它提供业界领先的高性能和低成本的解决方案,未来几年将成为 MCU 应用的热点和主流。目前国内只有 ARM 公司的 MDK 和 RVDS 开发工具可以支持 Cortex-M3 芯片的应用开发。业界最优秀的 ARM 编译器RealView 编译器,代码更小,性能更高RealVie
5、w MDK 的 RealView 编译器与 ADS 1.2 比较:代码密度:比 ADS 1.2 编译的代码尺寸小 10%;代码性能:比 ADS 1.2 编译的代码性能高 20%。可以到 KEIL 的官方下载 RealView MDK 下载的版本是试用版的有 32K 的代码限制可以在网上找个注册机,好像 3.x 的注册机就行。2.关于 JlinkJlink 是 SEGGER 公司为支持仿真 ARM 内核芯片推出的 JTAG 仿真器。配合 IAR EWARM,ADS,KELL,WINARM,RealView 等集成开发环境支持所有 ARM7/ARM9 内核芯片的仿真,通过 RDI 接口和各集成开发
6、环境无缝连接,操作方便,简单易学,是学习开发 ARM 的最实用的开发工具。关于 Jlink 的特性可以参考 SEGGER 的官方介绍 SEGGER3.创建跑马灯工程打开 Keil uVision4 然后新建一个工程 tq2440,然后选择 CPU 类型,这里我们选 tq2440 所使用的 s3c2440a确定后会提示我们是否添加 s3c2440 的启动代码到我们的工程(这是 RealView MDK 相对是ads1.2 的一个特点它会自动生成相应 CPU 的启动代码,而且配置启动代码也很方便后面会讲到。)这里我们选是这时候我们的工程就建好了,启动代码也有了,下面我们就看一下这个启动代码启动代码
7、还不少啊,有 1000 多行,不要害怕其实代码并不多,你可以仔细看一下,有一多半都是注释,而且不用手动更改代码就能实现启动代码的配置,点上图中红色部分的 Configuration Wizard 就可以图形方式对启动代码进行配置比如我们要配置看门狗定时器就可以选中 Watchdog Time Setup,点开它左边的加号可以进行详细的设置,这里我们图省事把所有对钩都点上。好了启动代码也配置好了,下面我们添加我们的led 跑马灯程序,我们在工程的目录下新建一个 main.c 文件然后把它添加到工程的源文件中来然后把下面的代码添加到 main.c 文件中1234567891011121314151
8、617/定义 PORTB 的控制寄存器地址#define GPBCON (*(volatile unsigned *) 0x56000010)#define GPBDAT (*(volatile unsigned *) 0x56000014)#define GPBUP (*(volatile unsigned *) 0x56000018)void delay()int i, j;for(i = 0; i 10000; i +)for(j = 0; j 50; j +);int main()GPBCON = 0x155555;/配置 protB 的所有引脚为输出18192021222324252
9、627282930313233343536373839404142while(1)/点亮第一个小灯GPBDAT |= 0x1E0;GPBDAT delay();/点亮第二个小灯GPBDAT |= 0x1E0;GPBDAT delay();/点亮第三个小灯GPBDAT |= 0x1E0;GPBDAT delay();/点亮第四个小灯GPBDAT |= 0x1E0;GPBDAT delay();return 0;好了,代码都全了,下面我们配置编译和连接选项,我们选择工程属性然后选 Target 选项按下图设置在 Output 选项中选上 Create HEX File 就行了,其它的选项先不用管,
10、然后我们按 F7 试着Build 下,查看输出信息,已经成功了只有一个 Warning 不能管它。从上图我们可以看到 hex 文件已经生成了,还告诉我们,我们的代码大小为 920 字节, 只读数据为16 字节 ,可读写数据为 0,ZI 数据为 1256 字节。好,下面我们就把它烧到我们的开发板中。我们还需要配置一下烧写选项我们还是选择工程属性然后选 Utilities 选项然后在烧写选项中选 J-LINK/J-Trace,然后去掉 Update Target before Debugging 选项,最后点 Settings 添加烧写算法,这里没有针对我们的 norflash EN29LV160
11、AB 的算法,我们只选一个相近的如我选的是 AM29F160DBFlash,但是这个算法只能烧写不能擦除(有兴趣的话可以自己写一个烧写算法)。好了万事具备只欠 JLINK 了,不过在烧写之前请确认你已经安装了 JLINK 的驱动,JLINK 的驱动可以到 SEGGER 官方下载 Software and documentation pack V4.14b ,驱动安装好了以后我们接上开发板,然后在把开发板的启动方式改为从 norflash 启动,然后启动开发板,最后点Download,如果没有意外的话,你就可以看到 led 的开始闪了。4.调试跑马灯程序光能下载可不行,我们最主要的是能调试,下面
12、我们看看怎么在 RealView MDK 下调试程序,其实RealView MDK 的高度功能要比 ads1.2 好用的多。我们打开工程属性先 Debug 选项然后选择Use J-LINK/J-Trace,然后点 Settings,在其中选择 JTAG Speed 为 Auto Selection,先择 Reset Strategy 为 Hardware,halt with BP0。最后选上 Run to main(),这样在调试的时候会自动停到我们的 main 函数入口。此外我们不需要一个调试初始化文件,这个文件不用写,我们可以在RealView MDK 的例子中找到它,比如在我机子上是D:
13、ToolElectronicRealViewMdkARMBoardsSamsungS3C2440RTX_Blinky 下的Ext_ARM.ini,我们把它拷到我们的工程目录下然后在 Initialization File 中选择它就 OK 了。还有一个地方我们得改就是程序的内存地址,刚刚我们烧写的时候用的是起始地址为 0 大小 2M 的设置,而这个地址 0 对应的正好是我们的 norflash 的地址。而现在我们调试的时候是直接把代码载入到内存(也就是 sdram)中,在 s3c2440 上它对就的地址是 030000000 所以我们要把 ROM的起始地址改为 03000000,相应的 RAM
14、 起始地址改为 030200000,大小不变。好了,调试选项都设置好了,我们开始调试,如果没有意外的话会出现下面所示我们可以看到它的调试环境很友好,很像 vs 之类的,左边是各个寄存器的值右上是汇编代码,下面是对应源码当前指针停在 main 中,我们可以单步调试,还可以下断点。还可以查看内存之类的信息等。如果我们没有 JLINK 还可以用 RealView MDK 自带的仿真器方法是在 Debug 选项中选择 Use Simulator 选项就可以了。如果出现了* error 65: access violation at 053000008 : no write permission 类似这样的的错误,可以试着去掉启动代码中的看门狗和时钟的设置。附上跑马灯的工程