mdk调试方法2410
裸跑程序跑马灯TQ2440Jlinkkeilu4(MDK)
裸跑程序之LED灯TQ2440+JLINK+keilu4(mdk)连调这个是我用JLINK+keilv4(mdk)在TQ2440跑的第一个裸奔程序。
希望对大家有帮助,如果有什么困难可以联系我,我的qq:644933989.希望大家多多交流,共同进步。
1、打开keil uvision4 新建工程,打开keil u4,点project->new2、我起名时ex1.如下,按保存。
3、在出现的下面的界面中选择samsung->S3C2440->S3C2440A芯片,点OK4、弹出对话中选是(拷贝S3C2440.S初始化文件)5、使用快捷工具栏上的方法2:点file->new6、如图,按右键加入S3C2440.h头文件。
7、写入使小灯一次点亮的代码#include <S3C2440.H>/**********************************被注释掉的是跑马灯程序。
如果想开跑马灯效果,只需把我注释掉的程序前面的//去掉,把下面一行注释掉就好***********************************/void delay(){int i, j;for(i = 0; i < 10000; i ++)for(j = 0; j < 50; j ++);}int main(){GPBCON = 0x155555;//配置protB的所有引脚为输出while(1){GPBDAT |= 0x1E0; //0001 1110 0000 第5~8位对应的是开发板上的四个小灯,为1为灭0为亮GPBDAT &= 0x1C0; //点亮第一个小灯delay();GPBDAT |= 0x1E0;//GPBDAT &= 0x1A0; //点亮第二个小灯GPBDAT &= 0x180; //点亮第一个、二个小灯delay();GPBDAT |= 0x1E0;//GPBDAT &= 0x160; //点亮第三个小灯GPBDAT &= 0x100; //点亮第一二三个小灯delay();GPBDAT |= 0x1E0;//GPBDAT &= 0x0E0; //点亮第四个小灯GPBDAT &= 0x0; //四个小灯全亮delay();}}8、然后按保存键。
RealviewMDK4.0进行2440开发快速入门
Realview MDK4.0 进行2440开发快速入门----苑臣芒(光芒)RealView MDK在中国推出已经有一段时间了,而且作为未来发展的趋势必将取代ADS1.2,成为工程师广泛应用的开发平台。
但是好多工程师还习惯于用ads环境来调试,编译,我以前也是,但毕竟ads软件已经没有技术支持了,这势必会在以后对开发工作有一定影响,ARM将Keil公司收购之后,正式推出了针对ARM微控制器的开发工具RealView Microcontroller Development Kit (简称RealView MDK 或者MDK),它将ARM开发工具RealView Development Suite(简称RVDS)的编译器RVCT与Keil的工程管理、调试仿真工具集成在一起,是一款非常强大的ARM微控制器开发工具。
所以将ads工程转成rvmdk工程势必会成为开发道路上的难题。
第一步:分析一下ads工程及环境。
这是我的工程文件,看一下ads的设置,首先是target setting选项,选择arm from elf接下来编译器选项总平台都选择arm920t,其余不需要修改。
如图其余几个编译器(c,c++)也相应都设置为arm920t,其他地方不需要动。
接下来就是关键的link选项了,最关键的是ro,这个是程序运行地址,也就是在ram的哪个地址运行,tq2440和mini2440都可以设置为0x30000000,也可以比这个数值稍微大些,看实际需要吧,我们设置为0x30000000.在option标签页中添加程序入口点,这个入口点就是主程序运行的第一条指令的地方,在2440init.s中可以找到是entry,所以这里填写“__ENTRY”接下来看lay out选项卡,设置如下:到这里,设置基本完工了,但还不能生成文件,在arm fromELF中我们选择plain binary,接可以生成与工程名字同名的bin文件了。
试图搞懂MDK程序下载到flash(三)--MDK配置选项Linker、Target、Debug的理解分析
试图搞懂MDK程序下载到flash(三)--MDK配置选项Linker、Target、Debug的理解分析在写这一节时,我还是想再重复一下自己写这文章的目的,我的目的就是为了实现将MDK 编写的裸机程序可不可以脱机运行,也就是不用调试的方法,因为调试的话程序默认是在SRAM中运行的,掉电丢失。
而要脱机运行,就得将程序编译后的文件下载到flash中,最好能是nand flash。
如果要下载到nand flash,那么就要编译生成一个bin文件,而不是用axf文件。
那么剩下的问题就是,怎么生成一个完整、正确的bin文件?所以我现在就需要看能否通过编写一个分散加载文件,解决bin文件的地址问题。
生成了bin文件,那么我就可以利用韦东山的方法,利用supervivi的v选项,配合DNW将程序下载到nand flash中并运行!现在咱们就分析一下MDK配置选项,首先解释一下MDK中三种linker之间的区别:1、采用Target对话框中的RAM和ROM地址。
采用此方式,需在Linker选项卡中勾选Use Memory Layout from Target Dialog选项(选中这一项实际上是默认在Target中对Flash和RAM的地址配置,编译链接时会产生一个默认的脚本文件),并且在Target中设置好RAM、ROM地址,图2所示。
MDK会根据Target选项中设定的RAM和ROM地址自动加载生成一个加载文件。
最后链接器会根据此文件中的信息对目标文件进行链接,生成axf镜像文件。
至于ROM和RAM是片内还是片外、容量(Size)多大,就需要根据芯片和开发板来决定了。
2、直接通过Linker选项卡中的R/O Base和R/W Base来设定链接信息。
链接器最后可根据此处指定的地址信息进行链接,链接的文件应该是顺序存放了,最多RO和RW分开。
此时需要注意的是应将Use Memory Layout from Target Diaglog前的勾去掉,且保证Scatter File一栏中未包含分散加载文件,并且要在Misc controls中设定镜像文件的入口点,如:--first 2440init.o(Init) 对于这个括号内的填写依据,我暂时还不懂。
TQ2440用mdk调试下载
一. 准备工作:1. JLINK驱动1). 首先安装驱动2). 阅读此目录下的readme文档, 用Flash.csv 支持更多Nor Flash的配置文件替换C:\Program Files\SEGGER\JLinkARM_V408e\ETC\JFlash目录下的同名文件(假设您是把这个软件安装到C盘的)对JLINK不熟可以参考TQ2440的使用手册第四章, TQ2440烧写说明, 4.1.3 使用Jlink-Flasher烧写2. 创建工程和编写代码选择CPU, 然后点OK复制启动代码到我的工程文件里, 选是,然后工程就建好了启动代码就在S3C2440.s里面, 在Keil里面是可以可视化自由配置的, 打开S3C2440.s你会看到很多的汇编代码, 呵呵, 我也不喜欢汇编. 然后点下面的配置向导先都打个勾吧, 其实我也不知道这样配置好不好,对了, LED对应的IO口要设置为输出建个main.c文件, 写你的工程代码咯~这里就以闪烁灯为例啦新建文件, 其实不太想说这个了, 考虑到可能还真有人没用过Keil的...出来个text3, 其实第一次出来是text1的, 无关紧要, 点保存, 文件名为main.c好了, 开始写代码了, 噢, 还要先把main.c文件添加到项目里来咧选择main.c, 鼠标单击Add工程目录里就有这个东东了下面是代码:注意到我在第一句打了个断点, 呵呵, 无奈, 之前调试的时候上系统启动后自动在main函数入口停下来的指令不管用, 所以就手动加了个断点了,然后就可以保存文件啦设置工程:这一项玩过51的就再熟不过了这个设置不重要, 习惯而已准备完啦, 继续~二. JLINK在SDRAM中调试TQ2440用SDRAM调试是一个不错的方式, 可以有效的减少Flash的擦写, 方便又快捷, 呵呵, 不啰嗦了, 直接进入正题~ 在SDRAM里面调试的时候是这样设置的, 主要是ROM1和RAM1的起始地址对了, 还要复制一个初始化文件, 文件在Keil的安装目录里找, 我这里是D:\Program Files\Keil\ARM\Boards\Samsung\S3C2440\RTX_Blinky\Ext_RAM.ini直接复制到你的工程目录下, 然后还要做一点修改, 如果不修改, 就调试不了, 会出现这样的情况工程输出的.axf文件(我也不清楚是用来干啥的)在工程目录下的Output文件夹里, 所以可以用编辑工具(记事本也行啦)打开来这样修改:然后添加这个文件,呃, 突然发现少做了一件事...这样就OK了, 设置utilities这里添加了烧写算法的, 其实在烧NOR Flash那里我才需要这个, 这个算法是不能擦除的, 但是这里我找不到合适的算法, 就用这个相近的了, 要擦除的话就用JFlash现在可以按F7编译了, 然后用你的JLINK连接好TQ2440开发板和你的电脑, TQ2440要先上电哦~最后在KEIL里面点调试就行了然后你就可以单步调试什么的了, 主要是由这里控制的, 我就不多说了, 自己捣鼓捣鼓去吧~三. 烧写NOR Flash烧写NOR Flash时要这样配置:然后是这个, 嘿嘿, 啰嗦一下, 设置utilities, 这里添加了烧写算法的, 这个算法是只能用来编程不能擦除的, 但是这里我找不到合适的算法, 就用这个相近的了, 要擦除的话就用JFlash按F7编译, 然后打开JFlash, JFlash的设置参考TQ2440的用户手册哈, 然后擦除...回到MDK, LOAD, 就可以看到下载成功了四. 生成下载到NAND的bin文件首先, TQ2440开发板出厂的时候是有烧有BootLoader的, 我也不懂BootLoader的原理, 所以直接用那个就行了. 如果刚刚烧过NOR Flash, 那么BootLoader就没了, 要重新烧进去了, 这个可以参考TQ2440的使用手册第四章, TQ2440烧写说明, 4.1.3 使用Jlink-Flasher烧写然后这个是设置接着然后编译就可以生成需要的bin文件了, 就在你的工程目录下, 下载的方式和TQ2440裸奔教程那里一开始说的是一样的, 用secureCRT和DNW, 我就不多说啦^_^我这里只说了步骤, 很多没有解释, 因为我也是菜鸟, 呵呵, 现在能用就行后面的就要你自己去琢磨了, 呵呵, SDRAM调试是最方便的了, 所以推荐使用SDRAM, 烧NOR Flash是比较麻烦的, 因为没有合适的算法, 如果有兴趣的话你可以写一个给我们用的哦~。
基于MDK4.11调试MINI2440操作过程
基于MDK4.11调试MINI2440操作过程刚天刚刚买了一个JLINK V8,刚一拿到手,迫不急待的开始进行一下仿真,但是,在ADS1.2环境下,老是卡死,也不知道是什么原因,也许是本人的电脑(1G内存)或者操作系统有问题(操作系统是有问题,但是资料太多,不敢重装系统,重装一次系统估计两天也不能完全配置好),所以在网上听说MDK不错,就去下载了MDK4.11,和相应的注册机(有想要朋友,请跟我联系),折腾了一天,才能真正的进行仿真。
(1) 首先造建一个功能,打开始MDK4.11,选择Project- Nes uVision Project..,如下图所示:(2)保存建立的工程,这里所建的工程为My_Led,如下图所示(3)选择CPU,由于MINI2440的CPU为S3C2440,所以在此我们选择S3C2440。
如下图所示:上面操作点击OK键后,会出现下面的对话框:在这里我们选择“是”,这是系统默认生成启动程序。
点击“是”后就会返回主界面,如下图所示:(4) 向工程中增加文件,由于本测试中只用到一个Main.c文件,所以,就以增加Main.c文件进行说明,如下图所示。
选择文件:增加成功后如下图:(5)从你的MDK4.11中拷贝Ext_RAM.ini到当前目录,本人的目录为:C:\Keil\ARM\Boards\Samsung\S3C2440\RTX_Blinky并把LOAD Obj\Blinky.axf INCREMENTAL 修改为LOAD .\My_Led.axf INCREMENTAL(6)下面进行配置相应的环境:按下图进入。
配置Target,按下面进行配置:如果需要生成bin文件的话,请按下图进行配置:配置Linker,如下图:配置Debug最后配置Utilities通过上面的配置,已经可以,通过编译过,连接等后就可以进行仿真了。
这些只是本人在实验过程中的一点总结,有可能不一定都得这样做,所以,如果我亲爱的读者有更好的方法,请告诉本人,让本人也进行学习一下。
TQ2440+KeilMDK新手入门2
第一章MDK环境配置和LED闪烁1 安装Keil MDK2 新建工程选择Samsung->S3C2440A接着会问你是否添加启动代码,选OK3 新建文件->保存为b.c->添加到工程,如图4 天机如下代码//定义PORTB的控制寄存器地址#include<S3C2440.h>void delay(){int i, j;for(i = 0; i < 10000; i ++)for(j = 0; j < 50; j ++);}int main(){GPBCON = 0x155555;//配置protB的所有引脚为输出while(1){//点亮第一个小灯GPBDAT |= 0x1E0;GPBDAT &= 0x1C0;delay();//点亮第二个小灯GPBDAT |= 0x1E0;GPBDAT &= 0x1A0;delay();//点亮第三个小灯GPBDAT |= 0x1E0;GPBDAT &= 0x160;delay();//点亮第四个小灯GPBDAT |= 0x1E0;GPBDAT &= 0x0E0;delay();}return 0;}/*********************************************************************/其中S3C2440.h有IO口的定义,这里摘录出GPADAT和GPBDAT的定义// I/O port#define GPACON (*(volatile unsigned long *) 0x56000000)#define GPADAT (*(volatile unsigned long *) 0x56000004)#define GPBCON (*(volatile unsigned long *) 0x56000010)#define GPBDAT (*(volatile unsigned long *) 0x56000014)#define GPBUP (*(volatile unsigned long *) 0x56000018)在TQ2440中GPBDAT的第四位为LED控制位,与51不同的时,ARM的IO口的有多种工作方式,具体的以后再说,这里直接配置为输出口:GPBCON = 0x155555;//配置protB的所有引脚为输出除了配置以外ARM的IO口跟51几乎很相似哦。
mdk调试方法2410
mdk调试方法2410/bbs/viewthread.php?tid=8478一般的调试编译器,ads、multi、mdk等,大概的调试步骤不外呼利用仿真器等硬件连接开发板,然后通过一些设备初始化文件ini,先将硬件初始化成功,然后下载程序,通过分散加载对程序的下载位置进行配置,然后跑程序,调程序就可以了。
举一个例子,利用mdk调试s3c2410,debug项里会有debuginram.ini 的配置文件,利用这个文件,将一些外部设备的寄存器初始化成功,比如外部sdram等,之后我们才可以将程序axf下载到板子,然后才能调试,mdk的debug选项会有load application选项,就是可以连接设备后,自动将代码下载进ram中,但对于内部ram的开发板,问题不大,对于外部开发板就会有问题,因为必须初始化完外部设备,后ram 才可以被处理器识别,然后才能下载程序,所以debuginram.ini就需要这样写:FUNC void Setup (void){// <o> Program Entry Point_WWORD (0x53000000, 0x0); //disable watch dog timer_WWORD (0x4C000004, ((0x47<<12)+(0x1<<4)+0x2) ) ;_WDWORD (0x56000070, 0x280000) ;//_WWORD (0x56000070, 0x00000005) ;_WDWORD (0x56000078, 0x0) ;//_WWORD (0x56000078, 0x00000001);_WWORD (0x48000000, ((2<<28)+(2<<24)+(1<<20)+(9<<16)+(1<<12)+(1<<8)+(1<<4)+0) ) ; _WWORD (0x48000004, ((3<<13)+(3<<11)+(7<<8)+(3<<6)+(3<<4)+(3<<2)+3) );_WWORD (0x4800001c, ((3<<15)+(1<<2)+1) );_WWORD (0x48000020, ((3<<15)+(1<<2)+1) ) ;_WWORD (0x48000024, ((1<<23)+(0<<22)+(0<<20)+(3<<18)+(2<<16)+1113) ) ;_WWORD (0x48000028, 0x32 );_WWORD (0x4800002c, 0x30 );_WWORD (0x48000030, 0x30 ) ;pc = 0x30008000;}//map 0x48000000, 0x60000000 read writeSetup(); // Setup for RunningLOAD exp1uc.axf INCREMENTALg, main注意load exp1uc.axf这行,就是下载程序用的,这样,即使ulink选项里的verify code download就不会提示ram有错误,不能下载了。
Keil ARM RVMDK软件仿真及SDRAM中调试S3C2410程序
Keil ARM RVMDK软件仿真及SDRAM中调试S3C2410程序摘自:/content/13/0110/17/11462699_259393778.shtml 弄了几天,终于吧ADS原来的一个LED小程序移植到KEIL ARM里面,并且搞掂可以在SDRAM中调试了。
首先说说硬件平台,ARM是三星的S3C2410,SDRAM是HY57V561620BT*2,64M容量,标准的SDRAM片选接在nGSC6,故地址空间在0x30000000~0x33ffffff。
软件平台是Keil ARM就是Realview MDK V3.40中国评估版,可以在上下载,现在破解不是很好,几乎每次调试后都要重新破解,以前用的V3.05虽然可以完全破解,但是3.05版的darmss9.dll文件,不支持2410,无法编译2410的程序,另外我也试过V3.20,但是不直接用wiggler JTAG来调试,所以就直接上3.40版本的RVMDK了,JTAG用H-JTAGV9.1,很快H-JTAG就可以支持NAND FLASH的烧写了,twentyone加油!下面详细介绍如何设置RVMDK。
安装RVMDK后,我这里用了本来ADS工程带的start.s启动代码,下次再试试用keil 向导带的S3C2410.s启动代码,把其它C程序文件添加到keil工程中,设置工程属性option for target,在target页中,Xtal设置的晶振频率只在软件仿真中有用,实际硬件调试,还是要设置MPLLCON寄存器实现,关键是设置Read/Only Memory Areas与Read/Write Memory Areas,如下图设置,这里是跟SDRAM的地址对应才行。
如果是软件仿真,就在下面on-chip 的IROM1与IRAM1前打钩,Startup钩上。
另外是Linker页的设置,把Use Memory Layout form Target Dialog的小钩去掉,在R/O base与R/W base设置,另外我这里使用了分散加载文件Scatter,在Scatter file中添加,其中:.\output\start.sct注意替换自己编写的scatter文件的目录路径。
用RealView_MDK调试mini2440(有图有方法有验证)
用RealView MDK与JTAG调试mini2440的方法实验平台:TQ2440开发板RealView MDK JTAG实验目的:让开发板上的LED闪烁实验步骤:1、安装并且让RealView MDK 及H-JTAG 正常工作2、新建工程,并且器件选择S3C2440A3、确认出现的对话框中以添加最基本的启动代码。
4、新建main.c保存并添加到工程中5、点击工具栏上按钮进入配置界面,6、进入“Debug”选项卡,选中使用J-Link调试器,Initialization File使用MDK提供的的文件,位置为C:\Keil\ARM\Boards\Samsung\S3C2440\RTX_Blinky,本实验中为方便起见建议将其拷到工程目录下,并将此文件倒数第三行LOAD Obj\Blinky.axf INCREMENTAL // Download program。
中的Obj\Blinky.axf改为实际生成的映像名字下图配置Debug 选项要注意三点:e 中选RDI Interface Driver,我选jlink的时候不能进入调试,而且在Keil4 中没有RDI Interface Driver 这个选,所以keil4下我还没实现调试;2.Run to main()选项勾上,调试的时候就会直接跑到main()函数了,当然如果你要看启动代码的执行过程,也可以把这勾去掉;3.InitializationFile 中选择你刚才改过的Ext_RAM.ini 文件。
下图配置Utilities 选项,选RDI Interface Driver,然后点setting 会弹出对话框2,在第一个Browse 选择JLinkRDI.dll 文件,从图中可以看到我是从我MDK 的安装目录的bin 文件夹下选的,其实你安装好的MDK 文件夹下原来是没有这个文件的,要在你所安装的JLink 驱动软件的目录下找到copy 到MDK 的bin 文件夹下。
J-link使用指导
Jlink使用指导1.驱动的安装运行Setup_JLinkARM_V402b.exe,启动驱动安装程序。
图1- 1 启动驱动安装程序图1- 2 驱动安装过程图1点击Yes,允许安装程序。
图1- 3 驱动安装过程图2图1- 4 驱动安装过程图3 选择安装路径,点击Next继续安装。
图1- 5 驱动安装过程图4图1- 6 驱动安装过程图5图1- 7 驱动安装过程图6图1- 8 驱动安装过程图7点击Finish完成安装步骤。
2.MDK调试设置为了更好地介绍Jlink的使用,我们以6.2_LED_Test为例进行说明。
双击运行Led_Test.Uv2,进入MDK IDE界面。
选择工程LED_Test IN RAM。
图2- 1 选择工程点击Project->Options for Target “Led_Test IN RAM”或是点击进行工程配置。
点击Debug选项卡,进行调试工程设置。
图2- 4 Debug选项卡界面在仿真器选择下拉列表框中,选择J-LINK/J-TRACE作为工程调试工具。
图2- 5 仿真器选择J-LINK/J-TRACE 点击OK保存工程配置退出。
点击工具栏上图标,重新编译工程。
点击工具栏上图标,进行MDK调试。
3.MDK固化Flash设置双击运行Led_Test.Uv2,进入MDK IDE界面。
选择工程LED_Test IN FLASH。
图3- 1 选择工程点击Project->Options for Target “Led_Test IN Flash”或是点击进行工程配置。
点击Utilities选项卡,进行固化Flash设置。
图3- 3 Utilities选项卡界面在下载器选择下拉列表框中,选择J-Link/J-Trace作为工程的Flash固化下载工具。
图3- 4 下载器选择点击Setting进行烧写算法的选择。
选择AM29F160DB作为工程的烧写算法。
图3- 5 添加烧写算法点击Ok,退回到Utilities选项卡界面,点击Ok保存工程配置。
S3C2410的看门狗定时器中断实验
实验5 S3C2410 看门狗定时器中断实验一、实验目的掌握S3C2410 看门狗定时器的工作原理和定时时间的计算方法,会在MDK中可视化配置看门狗,理解看门狗中断的触发过程,熟练掌握和中断相关寄存器的使用以及中断服务函数的编程方法。
二、实验预备知识熟悉UP-NETARM2410实验箱的结构,S3C2410的外设接口电路,熟悉MDK编程软件的使用方法,熟悉C语言程序设计的一般方法。
三、实验内容在MDK的配置向导中配置WDT,使其定时一秒,定时时间到后触发WDT中断,控制三个LED每隔一秒循环闪烁,编写C语言程序编译并下载到UP-NETARM2410实验箱,可以看到GPC5/GPC6/GPC7上所接的三个LED循环闪烁,实现精确定时一秒。
图1 MDK中看门狗定时器的配置四、参考程序本工程中包括三个文件:S3C2410A.s、ledflash.c和cvectaddr.c主程序文件ledflash.c的内容如下:1 extern void openDog(void);23 extern void c_Wdt_ISR(void);45 int main()6 {7 // 0x010FFF20+0x24 is the address of Watchdog jumper8 *(volatile unsigned int *)(0x010FFF20+4*9)=(unsigned)c_Wdt_ISR;9 openDog();10 while(1)11 {1213 }14 }文件cvectaddr.c的内容如下:1 #define LED1_MASK 0x202 #define LED2_MASK 0x403 #define LED3_MASK 0x8045 #define GPCDAT_ADDR (*(volatile unsigned int *)0x56000024)67 #define SRCPND (*(volatile unsigned int *)0x4A000000)8 #define INTMOD (*(volatile unsigned int *)0x4A000004)9 #define INTMSK (*(volatile unsigned int *)0x4A000008)10 #define PRIORITY (*(volatile unsigned int *)0x4A00000C)11 #define INTPND (*(volatile unsigned int *)0x4A000010)12 #define INTOFFSET (*(volatile unsigned int *)0x4A0000141314 // enable watchdog timer intterupt15 void openDog(void)16 {17 INTMOD = 0x0; // set as IRQ18 INTMSK &= ~(0x200); //open Dog19 PRIORITY = 0x7F;20 }21 int number=0;22 int nLED=0;23 __irq void c_Wdt_ISR()24 {2526 int iReg=0;27 if(SRCPND | 0x200)28 SRCPND = 0x200;29 if(INTPND | 0x200)30 INTPND = 0x200;31 //INTMSK |= 0xFFFFFFFF; //close all, include Dog32 nLED = 0;33 switch(number)34 {35 case 0: // SWI number 0 code36 nLED ^=(LED2_MASK | LED3_MASK);// LED1 light37 break;38 case 1:39 nLED ^=(LED1_MASK | LED3_MASK);// LED2 light40 break;41 case 2:42 nLED ^=(LED1_MASK | LED2_MASK);// LED3 light43 break;44 }45 number++;46 if(number>2)47 number=0;48 GPCDAT_ADDR = nLED; // Led shine in turn4950 __asm // open IRQ51 {52 MRS iReg, CPSR53 BIC iReg, iReg, #0x8054 MSR CPSR_c, iReg55 }56 //INTMSK &= ~(0x200); // open Dog57 }五、实验结果请自己作答。
基于MDK的S3C2440工程建立以及下载
MDK工程创建+程序下载+硬件仿真1、创建工程文件夹,添加以上几个文件夹Config文件夹包含配置文件,具体配置文件如下:Src文件夹包含程序用到的.c和.s文件Inc文件夹包含程序用到的.h文件Obj_list文件夹用于编译调试产生的目标文件和过程文件2、创建新的工程3、保存选择ARM芯片4、选择否5、右键Target 1,选择Manage Components... 6、如上图所示添加文件,点击OK。
(如果新加了.h和.c的头文件,也要在这里添加)7、右键Target 1,选择Options for Target ‘Target 1’...8、Output选项卡,点击Select Folder for Objects...,选择之前创建的obj_list文件夹,该文件夹用于存放目标文件。
9、Listing选项卡,点击Select Folder for Listings...,选择之前创建的obj_list文件夹,该文件夹用于存放调试生成的过程文件。
10、User选项卡,勾中Run #1 添加fromelf.exe --bin -o .\obj\@p.bin .\obj\@p.axf 11、C/C++和Asm选项卡,Include Paths添加之前添加的inc文件夹,目的是为了添加头文件。
12、Linker选项卡,设置如上图。
13、Debug选项卡,硬件仿真选中右侧user,选中J-Link仿真器,点击Setting,弹出右侧窗口,选择JTAG Speed 为Auto Selection。
点击Initialization File,选中之前添加的config文件夹中的Ext_RAM.ini文件,点击右侧Edit.14、Utilities选项卡,选择J-LINK仿真器,去掉Update Target before Debugging前面的对号。
点击OK,完成15、在编程区窗口,对Ext_RAM.ini文件进行修改,如上图,只需修改.axf文件为所建工程的名字即可。
arm2410实验手册经典教程
实验目录实验一、熟悉realview开发环境 (2)1.1 RealView MDK软件开发环境简介 (2)1.1.1 RealView MDK的突出特性 (2)1.1.2 产品模块介绍 (2)1.2RealView 使用 (5)1.2.1创建一个工程 (5)1.2.1.1选择工具集 (5)1.2.1.2创建工程文件 (7)1.2.1.3 选择设备 (7)1.2.2 编译、链接工程 (8)1.2.2.1 设置目标硬件的工具选项 (8)1.2.2.2 增加连接控制文件 (9)1.2.2.3 编译链接 (9)1.2.3 程序调试 (10)1.2.4 工程选项页概述 (11)实验二、ARM指令集 (12)2.1 ARM汇编指令1 (12)2.2 ARM汇编指令2 (20)2.3 ARM汇编指令3 (21)实验三 (23)3.1 LDR/STM指令寻址实验 (23)3.2 ARM汇编子函数调用 (25)3.3Thumb汇编指令练习 (25)3.4利用ARM汇编实现开发板LED灯控制 (25)实验四 (26)4.1简单C语言程序实验 (26)4.2汇编与C语言的相互调用实验 (26)4.3 C语言中内联汇编程序实验 (27)4.4 C语言中嵌入型汇编程序实验 (27)4.5 SWI软中断实验 (28)4.6综合编程实验 (28)实验五、I/O及串口通信编程实验 (29)实验六、中断实验 (32)实验七、实时时钟实验 (32)实验八、看门狗控制实验 (33)实验九、PWM接口实验 (33)实验十、A/D转换实验 (33)实验十一、I2C串行通信实验 (34)实验一、熟悉realview开发环境1.1 RealView MDK软件开发环境简介RealView MDK全称RealView MDK中国版开发套件,源自德国Keil公司,被全球超过10万的嵌入式开发工程师验证和使用,是ARM公司目前最新推出的对各种嵌入式处理器的软件开发工具。
2410QT实验步骤
一、编译本机QT环境:宿主机:RH9编译器:gcc 3.2.2源码包:工作目录:/root/x86QT############ build x86 QT ###########################设置环境变量:cd x86QTexport QTEDIR=$PWD/qt-2.3.10export QT2DIR=$PWD/qt-2.3.2export TMAKEDIR=$PWD/tmake-1.131.1 编译qt-2.3.2包cd $QT2DIRexport TMAKEPATH=$TMAKEDIR/lib/linux-g++export QTDIR=$QT2DIRexport PATH=$QTDIR/bin:$PATHexport LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH./configure -no-xftyesmake至此本机的qt-2.3.2环境编译完成!1.1.1编写HELLO程序测试该环境################# test example hello(x86 qtlib) ################## [root@BC x86QT]# mkdir exp[root@BC x86QT]# cd exp/[root@BC exp]# vi hello.cpp//hello.cpp#include <qapplication.h>#include <qlabel.h>int main(int argc, char **argv){QApplication app (argc, argv);QLabel *hello = new QLabel("Hello Qt/Embedded!", 0);app.setMainWidget(hello);hello->show();return app.exec();//end[root@BC exp]# lshello.cpp设置编译环境变量:export TMAKEPATH=$TMAKEDIR/lib/linux-g++export QTDIR=$QT2DIRexport PATH=$QTDIR/bin:$PATHexport LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH开始编译:[root@BC exp]# $TMAKEDIR/bin/progen -t app.t -o hello.pro[root@BC exp]# lshello.cpp hello.pro查看相关变量:[root@BC exp]# echo $TMAKEPATH/root/x86QT/tmake-1.13/lib/linux-g++[root@BC exp]# echo $QTDIR/root/x86QT/qt-2.3.2[root@BC exp]#$TMAKEDIR/bin/tmake -o Makefile hello.pro[root@BC exp]#make[root@BC exp]# ./hello################## end hello ###############################1.2 编译qt-2.3.10包########## build qte lib for local env #####################cd $QTEDIR设置环境变量:export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++export QTDIR=$QTEDIRexport PATH=$QTDIR/bin:$PATHexport LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH配置库:./configure -no-xft -qvfb -depths 4,8,16,32yes5make1.2.1 编写HELLO测试该环境################# test example hello(qtelib) ###############[root@BC x86QT]# mkdir exp[root@BC x86QT]# cd exp/[root@BC exp]# vi hello.cpp//hello.cpp#include <qapplication.h>#include <qlabel.h>int main(int argc, char **argv){QApplication app (argc, argv);QLabel *hello = new QLabel("Hello Qt/Embedded!", 0);app.setMainWidget(hello);hello->show();return app.exec();}//end[root@BC exp]# lshello.cpp[root@BC exp]# $TMAKEDIR/bin/progen -t app.t -o hello.pro[root@BC exp]# lshello.cpp hello.pro查看环境变量:[root@BC exp]# echo $TMAKEPATH/root/x86QT/tmake-1.13/lib/qws/linux-x86-g++[root@BC exp]# echo $QTDIR/root/x86QT/qt-2.3.10[root@BC exp]#$TMAKEDIR/bin/tmake -o Makefile hello.pro编译:[root@BC exp]#make启动QVFB[root@BC exp]# qvfb &执行[root@BC exp]# ./hello################## end hello ###############################二、编译ARM版本QT/E库环境宿主机:RH9 目标机:ARM交叉编译器:arm-linux-gcc3.4.1源码包:工作目录:/root/arm2410QT########## build qtelib env for arm ########################cd /root/arm2410QT设置环境变量:export QTEDIR=$PWD/qt-2.3.10export TMAKEDIR=$PWD/tmake-1.13export TSLIBDIR=$PWD/tslibexport TSLIBINST=$PWD/tslib-installexport LD_LIBRARY_PATH=$TSLIBINST/libexport CC=arm-linux-gcc2.1 编译触摸屏库:cd tslib./autogen.sh --host=arm-linux --prefix=$TSLIBINSTmake cleanmake -j4make install拷贝触摸屏库到QTE库目录:#####cp tslib to qte lib dircp -a $TSLIBDIR/src/.libs/* $QTEDIR/lib/cp -a $TSLIBDIR/plugins/.libs/*.so $QTEDIR/lib/cp -a $TSLIBINST/bin/* $QTEDIR/bincp -a $TSLIBINST/etc/ts.conf $QTEDIR/cp -a $TSLIBINST/include/ts* $QTEDIR/include/2.1 编译ARM版本QT/E库环境:#####Build Qt/Embedded编译之前要修改一些东西1.在qt-2.3.10/src/kernel/ 下,修改qwsmouse_qws.cpp程序,此文件中有3处/etc/pointercal,把这3处的e tc修改成tmp,因为开发板是在/tmp/下找到校正信息临时文件的,"pointercal"这个名子随便改,只要在接下来的环境变量设置时,写成相应的就行(看接下来的几步)2.修改qt-2.3.10/configs/linux-arm-g++-shared文件:#Linking application下的SYSCONF_LIBS = -lm 修改为SYSCONF_LIBS=-lm -lts#Linking shared libraries 下的SYSCONF_LINK_SHLIB=arm-linux-gcc修改为SYSCONF_LINK_SHLIB=arm-linux-gcc -lts修改完后,开始编译qte-2.3.10cd $QTEDIRexport TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++export QTDIR=$QTEDIRexport PATH=$QTDIR/bin:$PATHexport LD_LIBRARY_PATH=$QT2DIR/lib:$QTDIR/lib:$LD_LIBRARY_PATH制作配置头文件:mv src/tools/qconfig-large.h src/tools/qconfig-my.h修改该配置文件,加入国际化支持:[root@BC qt-2.3.10]# vi src/tools/qconfig-my.h注释掉://#define QT_NO_TRANSFORMATIONS//#define QT_NO_TRANSLATION等。
MDK使用方法
STM32入门——初识K eil MDK[嵌入式]发布时间:2011-11-09 19:49:44Keil MDK的安装与工程建立KEIL MDK开发工具源自德国Keil 公司,被全球超过10 万的嵌入式开发工程师验证和使用,是ARM公司目前最新推出的针对各种嵌入式处理器的软件开发工具。
KEIL MDK 集成了业内最领先的技术,包括µVision4集成开发环境与RealView 编译器。
支持ARM7、ARM9和最新的Cortex-M3/M1/M0 内核处理器,自动配置启动代码,集成Flash 烧写模块,强大的Simulation设备模拟,性能分析等功能,与ARM之前的工具包ADS等相比,RealView编译器的最新版本可将性能改善超过20%。
KEIL MDK出众的价格优势和功能优势,已经成为ARM软件开发工具的标准,目前,KEIL MDK在国内ARM开发工具市场已经达到90%的占有率。
使用MDK前当然要先把KEIL MDK安装好。
读者首先要从/下载到最新的KEIL MDK,笔者使用的是KEIL MDK V4.13a。
下载完毕之后双击开始安装。
首先看到欢迎界面:点击Next,勾选安装协议:下一步,选择安装路径(笔者因硬盘空间不足安装在E盘,但若读者硬盘资源充裕,则建议安装在C盘,跑起来快些):下一步,填写用户信息,个人用户随意填入即可:点击Next 就进入实质的安装过程啦,Wait for a Whle… …很快安装完毕,看到 2 个可选项:1、保持当前uV ision 的设置。
2、载入以下选择的工程实例,默认即可。
点击Next,来到最后一个安装界面:1.是否安装ULINK Pro Driver V1.0驱动?2.是否显示软件发布说明?读者可以按照自己的需求勾选。
点击Finish,KEIL MDK 就完成安装了,可以发现桌面上生成了名为“Keil uVision4”的可执行文件快捷方式。
MDK基本软件调试方法
MDK基本软件调试方法编译没有问题是必须的!
下面是需要设置的一些项目:
1.首先编译通过后进入工程设置
2.选择debug选项卡选择如图所示确定
3.之后一定要重新编译下
4.接下来就是进入调试模式了选择如图所示图标
进入调试模式如图:
5.选择下图所示图标开始运行程序
6.观察其中颜色变化
被使用过的代码前面都是绿色的··没使用的就是灰色,
还有中断函数不是绿色的,这个需要自己判断了。
这个主要是为写代码能力比较差的同学写的。
希望适用!
还有打断点,知道C语言的都了解这个作用我就不多说了;如图:。
基于2410的MDK例程移植
基于S3C2410的MDK例程移植Embest1 前言Keil是业界最好的51单片机开发工具之一,它拥有流畅的用户界面与强大的仿真功能。
ARM将Keil公司收购之后,正式推出了针对ARM微控制器的开发工具RVMDK,它将ARM编译器RVCT与Keil的工程管理、调试仿真工具集成在一起,是一款非常强大的ARM微控制器开发工具。
2007年5月,ARM正式授权中国深圳英蓓特公司代理中文版RVMDK的出售事务。
S3C2410目前已经在国内外市场得到了普遍的应用,因此移植S3C2410的MDK例程,对于推广MDK具有比较重要的意义。
其实,对于MDK例程的移植,无论是从Embest IDE下,还是从ADS下,其过程都是相似的。
S3C2410基于ARM920T内核,16KB指令Cache,16KB数据Cache,支持MMU,Nand Flash BootLoader,内部嵌有4KBRAM,即启动石,亦可在系统启动完成后,做为他用。
同时S3CEV2410开发板还集成了32M*2 NorFLash,64MSDRAM。
因此在移植的时候,可以将程序分别运行在SDRAM和Nor Flash 中。
2 相关技术说明2.1 启动代码MDK一个强大的功能就是能够自动生成启动代码,而且可以进行图形化的代码设置,这就可以极大地方便了工程师,减少了百余行的汇编代码的编写。
虽然一些老工程师习惯而且更喜欢文本编辑的方式,但是不可否认,MDK提供的启动代码生成向导,对于加快项目开发进度,提高工作效率,帮助新人迅速进入开发工作具有十分重要的意义。
同样,MDK支持S3C2410启动代码自动生成。
1) 在MDK中新建工程打开RVMDK,在主菜单中选择Project→New…→uVision Project,并给新工程命名为New_MDK.uv2,单击“保存”,见图2-1。
图2-1在RVMDK中新建工程在RVMDK自动弹出的器件选择窗口(Select Device for Target)中选择该工程所对应的处理器型号,“S3C2410”,并单击“确定”,见图2-2。
TQ2440+RealViewMDK调试LED跑马灯(成功!)
TQ2440+RealViewMDK调试LED跑马灯(成功!) 去年买的TQ2440的开发板,搁了⼀年,没咋⽤,今年⼼⾎来潮,想学学了,于是⼜翻开了板⼦,结果是个伤脑筋的活啊。
果然⽐单⽚机、AVR的来的难啊,搞了两天,也参考了⽹上的资料,竟然(居然)才弄好了⼀个LED跑马灯(⽆OS)的编译和运⾏,于是乎⾃⼰先记录下(不管是否真的懂了其中的细节),以后在慢慢体验挖掘为什么。
在⽹上收了“tq2440 mdk”,下载了⼀个《tq2440跑马灯的⼯程(MDK)》的压缩包,估计是可以运⾏的,但是他没有说怎么运⾏,(在NOR还是NAND⽅式下啊?。
)所以⾃⼰在琢磨琢磨,下来《ARM学习-RealView_MDK+Jlink+TQ2440_调试笔记》这篇⽂章。
由于⽂件⾥的图⽚不是很清楚,so。
这⾥先上⼏个图⽚:上⾯的设置务必要⼀致。
main函数:#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(void){GPBCON = 0x155555;//配置protB的所有引脚为输出while(1){//点亮第⼀个⼩灯GPBDAT |= 0x1E0;GPBDAT &= 0x1C0;delay();//点亮第⼆个⼩灯GPBDAT |= 0x1E0;GPBDAT &= 0x1A0;delay();//点亮第三个⼩灯GPBDAT |= 0x1E0;GPBDAT &= 0x160;delay();//点亮第四个⼩灯GPBDAT |= 0x1E0;GPBDAT &= 0x0E0;delay();}return0;}当然在建⽴⼯程以前,把S3C2440.s的⽂件添加进来。
RealView MDK调试小技巧
RealView MDK调试小技巧RealView MDK具有强大的调试功能。
正确使用这些调试功能可以更快更准地发现软件中存在的问题,其中有些调试小技巧并不是很引人注意,在实际工作中如果能注意并使用这些小技巧将大大方便我们工作。
下面从Symbol窗口、逻辑分析仪和Watch窗口三个方面来介绍一下调试中的小技巧。
一、Symbol窗口Symbol窗口可以查看虚拟寄存器和外围特殊寄存器的名称、地址、类型。
当我们想要在内存窗口中查看外围寄存器的值时。
是不是需要去手册上查一下这个寄存器的地址呢。
答案是――可以,但有个更方便直接的方法,就是从Symbol窗口可以查到所有外围特殊寄存器的地址和类型。
在调试时打开Symbol窗口的方法:单击MDK菜单View然后点击,在工程工作区左边即可看到该窗口,如下图。
图一Symbol窗口在工程中的位置二、逻辑分析仪逻辑分析仪可以跟踪全局变量、虚拟寄存器和外围特殊寄存器的值。
1、我们可能需要将IO端口的数据寄存器某位的值在逻辑分析仪上显示出来。
一种方法是在逻辑分析仪的Setup对话框里通过Mask来屏蔽那些不需要显示的位。
还有一种更简单的方法,就是在寄存器名后面加上后缀“.位序”。
比如A口有16个引脚。
其对应的数据寄存器为PORTA(16位)。
现在需要跟踪引脚7的值。
则只需添加信号PORTA.7即可,系统会自动设置Mask值。
实际上,任何跟踪的信号,只要是整型数据都能使用上面提供的方法。
这对于位显示非常直观,简捷。
2、当我们需要在逻辑分析仪中显示Symbol窗口中列出的虚拟寄存器和外围特殊寄存器的值时,没必要在Setup对话框中写出该信号的名称。
只需将Symbol窗口的寄存器名直接拖到逻辑分析仪中即可。
三、Watch窗口Watch窗口可以查看程序中全局变量的值并实时更新。
也可查看外围特殊寄存器和虚拟寄存器的值。
我们可以在Watch窗口中按F2然后将变量名敲进去,回车就可看到该变量的值,但更方便的方法是可以直接将选中的该变量或寄存器名直接拖到Watch窗口中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
mdk调试方法2410
高稳定Jlink V8 购买链接
/auction/item_detail-db2-c58cfe07f4208c0b445df23f59d5116e.htm 通过JLINK V8仿真器来调试ARM9处理器的过程视频:
/bbs/viewtopic.php?id=2280
一般的调试编译器,ads、multi、mdk等,大概的调试步骤不外呼利用仿真器等硬件连接开发板,然后通过一些设备初始化文件ini,先将硬件初始化成功,然后下载程序,通过分散加载对程序的下载位置进行配置,然后跑程序,调程序就可以了。
举一个例子,利用mdk调试s3c2410,debug项里会有debuginram.ini 的配置文件,利用这个文件,将一些外部设备的寄存器初始化成功,比如外部sdram等,之后我们才可以将程序axf下载到板子,然后才能调试,mdk的debug选项会有load application选项,就是可以连接设备后,自动将代码下载进ram中,但对于内部ram的开发板,问题不大,对于外部开发板就会有问题,因为必须初始化完外部设备,后ram才可以被处理器识别,然后才能下载程序,所以debuginram.ini就需要这样写:
FUNC void Setup (void)
{
// <o> Program Entry Point
_WWORD (0x53000000, 0x0); //disable watch dog timer
_WWORD (0x4C000004, ((0x47<<12)+(0x1<<4)+0x2) ) ;
_WDWORD (0x56000070, 0x280000) ;
//_WWORD (0x56000070, 0x00000005) ;
_WDWORD (0x56000078, 0x0) ;
//_WWORD (0x56000078, 0x00000001);
_WWORD (0x48000000, ((2<<28)+(2<<24)+(1<<20)+(9<<16)+(1<<12)+(1<<8)+(1<<4)+0) ) ;
_WWORD (0x48000004, ((3<<13)+(3<<11)+(7<<8)+(3<<6)+(3<<4)+(3<<2)+3) );
_WWORD (0x4800001c, ((3<<15)+(1<<2)+1) );
_WWORD (0x48000020, ((3<<15)+(1<<2)+1) ) ;
_WWORD (0x48000024, ((1<<23)+(0<<22)+(0<<20)+(3<<18)+(2<<16)+1113) ) ;
_WWORD (0x48000028, 0x32 );
_WWORD (0x4800002c, 0x30 );
_WWORD (0x48000030, 0x30 ) ;
pc = 0x30008000;
}
//map 0x48000000, 0x60000000 read write
Setup(); // Setup for Running
LOAD exp1uc.axf INCREMENTAL
g, main
注意load exp1uc.axf这行,就是下载程序用的,这样,即使ulink选项里的verify code download就不会提示ram有错误,不能下载了。
有的朋友的2410工程的debuginram.ini并不带外围设备初始化代码,也可以照样下载程序进ram里进行调试,估计是因为开发板flash里已经有了一些初始化代码,bootloader代码等,帮我们做了相关的工作,所以就不需要mdk来做了。
但现在我的问题是,程序虽然可以下载,也可以调试,但是调试不正常,单步或者跑程序都乱跑,有时候进函数内部,有时候就不进,所以请哪位高手给指点一下,谢谢。
用mdk调试2410还没有试过,调试LPC2210的时候,对于外部的ram调试的话是首先要初始化外围设备,让他工作于正常状态。
问题还是得从分散加载文件找起,你可以参考一下lpc2210下的keil的设置
现在能调试了,我把ucosii也加到工程里了,出了一次未定义指令错误,暂时还算稳定,分散加载还是按照原来的ads的做的,稍微去掉了一些参数,还看到一篇文章说,keil必须要满足堆栈8字节对齐,我就改了改,把
STMFD sp!, {r0-r12}
改成了 STMFD sp!,{r0-r12,lr} 这样,保证偶数压栈,也不知道对不对,也不了解,之前的不能调试,是否是因为不对齐造成的,我再调试看看吧。
不过确实用ulink+keil3.11可以调试S3c2410了。