mdk调试方法2410
- 格式:pdf
- 大小:68.71 KB
- 文档页数:2
裸跑程序之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、然后按保存键。
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 编写的裸机程序可不可以脱机运行,也就是不用调试的方法,因为调试的话程序默认是在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) 对于这个括号内的填写依据,我暂时还不懂。
一. 准备工作: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操作过程刚天刚刚买了一个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通过上面的配置,已经可以,通过编译过,连接等后就可以进行仿真了。
这些只是本人在实验过程中的一点总结,有可能不一定都得这样做,所以,如果我亲爱的读者有更好的方法,请告诉本人,让本人也进行学习一下。
第一章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/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程序摘自:/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与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 文件夹下。
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保存工程配置。
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了。