您的位置 首页 解答

Eclipse在线调试ARM11——Tiny6410+OpenJTAG

Eclipse、CDT、OpenJTAG驱动、工具链以及OpenOCD的安装这里就不多说了,请根据OpenJTAG附带光盘中的说明进行安装,这里是OpenJTAG附带光盘

Eclipse、CDT、OpenJTAG驱动、东西链以及OpenOCD的装置这儿就不多说了,请依据OpenJTAG顺便光盘中的阐明进行装置,这儿是OpenJTAG顺便光盘中的装备文档,需求的话能够下载:

http://download.csdn.net/detail/girlkoo/4632348

1.工程的创立及编译

Eclipse装备完结后咱们来创立一个工程,首先是发动Eclipse,Workspace能够依据自己的需求挑选,接下进行工程创立,File->New->C Project,在Project Name中填写工程称号,能够依据自己的项目需求填写,这儿我写为leds,在下方的Project type挑选框中挑选Makefile project->Empty Project,在Toolchains挑选框中挑选Other toolchain,然后点击Finish即可完结Tiny6410工程的创立,接下来咱们编写代码,当然是leds灯的操控代码,因为Leds灯代码的比如多,容易懂,运转成果还能够在板子上直接看到,相当于学习编程时的Hello world。

新建文件start.S(File->New->File from template),编写如下代码:

  1. .externMain
  2. .global_start
  3. _start:
  4. ldrr0,=0x70000000
  5. orrr0,r0,#0x13
  6. mcrp15,0,r0,c15,c2,4
  7. ldrr0,=0x7E004000
  8. movr1,#0
  9. strr1,[r0]
  10. ldrsp,=8*1024
  11. blMain
  12. halt:
  13. bhalt

新建文件main.c(File->New->Source File),编写如下代码:

  1. voiddelay(inttimes){
  2. volatileinti;
  3. for(i=0;i!=times;++i){
  4. ;
  5. }
  6. }
  7. voidMain(){
  8. volatileunsignedlong*gpkcon0=(volatileunsignedlong*)0x7F008804;
  9. volatileunsignedlong*gpkdat=(volatileunsignedlong*)0x7F008808;
  10. inti=0;
  11. *gpkcon0=(1<<16)|(1<<20)|(1<<24)|(1<<28);
  12. while(1){
  13. *gpkdat=~(i<<4);
  14. if(++i==16)
  15. i=0;
  16. delay(10000);
  17. }
  18. }

新建文件Makefile(File->New->File from template),编写如下代码:

  1. all:leds.bin
  2. leds.bin:start.omain.o
  3. arm-elf-ld-Ttext0-oleds.elfstart.omain.o
  4. arm-elf-objcopy-Obinaryleds.elfleds.bin
  5. arm-elf-objdump-Dleds.elf>leds.dis
  6. start.o:start.S
  7. arm-elf-gcc-g-ostart.ostart.S-c
  8. main.o:main.c
  9. arm-elf-gcc-g-omain.omain.c-c
  10. clean:
  11. rm*.oleds.elfleds.binleds.dis

然后就能够编译该工程了,在Project Explorer中选中该工程(这儿是leds)右键并在菜单中挑选Build Project即可编译该工程,假如需求铲除编译发生的代码挑选Clean Project即可,到这儿现已完结了Tiny6410工程的修改和编译作业。

2.Eclipse经过OpenJTAG在线调试Tiny6410

运用Eclipse在线调试Tiny6410实际上是运用gdb在线调试Tiny6410,Eclipse的调试模块是对GDB的封装。GDB在线调试实际上是GDB的长途调试,也便是说用GDB长途链接GDB Server进行长途调试,GDB长途调试的详细信息这儿不多讲,能够自己网上查找一下。长途调试时本机GDB从ELF文件中获取调试信息,这便是装备调试信息时设置的C/C++ Application是编译过程中生成的ELF文件而不会终究烧写到ARM上运转的BIN文件的原因。

GDB能够在本机的ELF文件上获取调试信息,可是单是这样还不行,还需求将对应的BIN文件烧写到方针机的内存中,这样进行经过GDB调试方针机时Eclipse将GDB下达调试指令转换成OpenOCD的指令,由OpenOCD经过OpenJTAG来操作硬件,这样,便是完成了GDB在本机下达调试指令,方针机相应的做出反响,也便是常说的单步调试。

因为GDB长途调试Tiny6410时需求将BIN文件下载到内存,所以

(1)假如代码在片内SRAM(Steppingstone)中运转

此刻代码的衔接地址为0且代码的体积小于Steppingstone的巨细,关于Tiny6410来说代码的体积需求小于8KB,这种状况下无需方针机初始化,能够直接调试程序。

(2)假如代码在SDRAM、DDR或许其他存储设备中运转

此刻代码的衔接地址为0x50000000~0x5FFFFFFF之间,体积也有或许大于Steppingstone的容量,这时GDB调试前需求下载一个程序到Tiny6410来初始化其DDR,这样OpenOCD才干经过OpenJTAG来将方针程序烧写到DDR上。

因而,应该针对以上两种状况做不同处理,关于第一种状况,GDB初始化文件能够这样写:

  1. targetremote127.0.0.1:3333
  2. monitorhalt
  3. #这两条指令是关MMU
  4. monitorarmmcr1501000
  5. monitorstep0
  6. 关于第二种状况能够这样写:
  7. targetremote127.0.0.1:3333
  8. monitorhalt
  9. #这两条指令是关MMU
  10. monitorarmmcr1501000
  11. monitorstep0
  12. echoConfiguringsystem…
  13. #下载init.bin到片内内存,意图是初始化DDR
  14. monitorload_imageD:/Working/arm/init/init.bin0x0c000000
  15. #运转
  16. monitorresume0x0c000000
  17. #中止
  18. monitorhalt
  19. #等候中止
  20. monitorwait_halt

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/jieda/256178.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部