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),编写如下代码:
- .externMain
- .global_start
- _start:
- ldrr0,=0x70000000
- orrr0,r0,#0x13
- mcrp15,0,r0,c15,c2,4
- ldrr0,=0x7E004000
- movr1,#0
- strr1,[r0]
- ldrsp,=8*1024
- blMain
- halt:
- bhalt
新建文件main.c(File->New->Source File),编写如下代码:
- voiddelay(inttimes){
- volatileinti;
- for(i=0;i!=times;++i){
- ;
- }
- }
- voidMain(){
- volatileunsignedlong*gpkcon0=(volatileunsignedlong*)0x7F008804;
- volatileunsignedlong*gpkdat=(volatileunsignedlong*)0x7F008808;
- inti=0;
- *gpkcon0=(1<<16)|(1<<20)|(1<<24)|(1<<28);
- while(1){
- *gpkdat=~(i<<4);
- if(++i==16)
- i=0;
- delay(10000);
- }
- }
新建文件Makefile(File->New->File from template),编写如下代码:
- all:leds.bin
- leds.bin:start.omain.o
- arm-elf-ld-Ttext0-oleds.elfstart.omain.o
- arm-elf-objcopy-Obinaryleds.elfleds.bin
- arm-elf-objdump-Dleds.elf>leds.dis
- start.o:start.S
- arm-elf-gcc-g-ostart.ostart.S-c
- main.o:main.c
- arm-elf-gcc-g-omain.omain.c-c
- clean:
- 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初始化文件能够这样写:
- targetremote127.0.0.1:3333
- monitorhalt
- #这两条指令是关MMU
- monitorarmmcr1501000
- monitorstep0
- 关于第二种状况能够这样写:
- targetremote127.0.0.1:3333
- monitorhalt
- #这两条指令是关MMU
- monitorarmmcr1501000
- monitorstep0
- echoConfiguringsystem…
- #下载init.bin到片内内存,意图是初始化DDR
- monitorload_imageD:/Working/arm/init/init.bin0x0c000000
- #运转
- monitorresume0x0c000000
- #中止
- monitorhalt
- #等候中止
- monitorwait_halt