Eclipse在线调试ARM11——Tiny6410+OpenJTAG

发布者:落寞梦惊最新更新时间:2015-08-20 来源: eefocus关键字:Eclipse  在线调试  ARM11  Tiny6410  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. .extern Main  
  2.  .global _start  
  3.  _start:  
  4.     ldr r0, =0x70000000  
  5.     orr r0, r0, #0x13  
  6.     mcr p15,0,r0,c15,c2,4  
  7.   
  8.     ldr r0, =0x7E004000  
  9.     mov r1, #0  
  10.     str r1, [r0]  
  11.   
  12.     ldr sp, =8*1024  
  13.     bl Main  
  14.   
  15. halt:  
  16.     b halt  

 

 

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

  1. void delay(int times){  
  2.     volatile int i;  
  3.     for(i = 0; i != times; ++i){  
  4.         ;  
  5.     }  
  6. }  
  7.   
  8. void Main(){  
  9.     volatile unsigned long* gpkcon0 = (volatile unsigned long*)0x7F008804;  
  10.     volatile unsigned long* gpkdat = (volatile unsigned long*)0x7F008808;  
  11.   
  12.     int i = 0;  
  13.   
  14.     *gpkcon0 = (1<<16)|(1<<20)|(1<<24)|(1<<28);  
  15.   
  16.     while(1){  
  17.         *gpkdat = ~(i<<4);  
  18.         if(++i == 16)  
  19.             i = 0;  
  20.         delay(10000);  
  21.     }  
  22. }  

 

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

  1. all:leds.bin  
  2. leds.bin: start.o main.o  
  3.     arm-elf-ld -Ttext 0 -o leds.elf start.o main.o  
  4.     arm-elf-objcopy -O binary leds.elf leds.bin  
  5.     arm-elf-objdump -D leds.elf > leds.dis  
  6.   
  7. start.o : start.S  
  8.     arm-elf-gcc -g -o start.o start.S -c  
  9.   
  10. main.o : main.c  
  11.     arm-elf-gcc -g -o main.o main.c -c  
  12.   
  13. clean:  
  14.     rm *.o leds.elf leds.bin leds.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. target remote 127.0.0.1:3333  
  2. monitor halt  
  3. # 这两条命令是关MMU  
  4. monitor arm mcr 15 0 1 0 0 0  
  5. monitor step 0  
  6. 对于第二种情况可以这样写:  
  7. target remote 127.0.0.1:3333  
  8. monitor halt  
  9. # 这两条命令是关MMU  
  10. monitor arm mcr 15 0 1 0 0 0  
  11. monitor step 0  
  12.   
  13. echo Configuring system...   
  14. # 下载init.bin到片内内存,目的是初始化DDR  
  15. monitor load_image D:/Working/arm/init/init.bin 0x0c000000  
  16. # 运行  
  17. monitor resume 0x0c000000  
  18. # 停止  
  19. monitor halt  
  20. # 等待停止  
  21. monitor wait_halt  
[page]
其中“D:/Working/arm/init/init.bin”要根据您的具体情况进行改写。

 

第二种跟第一种的不同在于第二种情况需要将init.bin文件烧写到Steppingtone来初始化Tiny6410的DDR。init.bin及其工程可以在这里下载,适用于所有支持OpenJTAG的S3C6410开发板:

 

另外,配置好这些后还需要配置调试环境的Commands选项,对于第一种情况,可以如下填写:

对于第二种情况,则可以这样写:

第一个里面写有reset和halt的原因是锁相环不能重复初始化,如果程序中对锁相环进行了设置reset之后就会失效,这样每次调试都会执行reset,后一次的设置就不会受前一次的影响。对于第二中情况里面没有加reset是因为代码要写到DDR中进行调试,reset之后init.bin的初始化作用失效,调试时无法烧写代码到DDR,进而无法进行调试。所以第二种情况下被调试的代码应该判断自己的位置,可以模拟u-boot,检测到代码在DDR中运行时跳过lowlevel_init。

通过上面这些分析,我们应该了解了OpenJTAG的调试原理,现在总结一下,使用OpenJTAG在线调试Tiny6410时应该按照以下步骤进行:

(1)启动OpenOCD,连接OpenOCD到开发板,然后在telnet中执行halt,将目标机挂起。

注意:默认状态下,OpenOCD自带配置文件的JTAG时钟频率是6000,对于某些开发板来说这个工作频率太高,经过测试Tiny6410的JTAG时钟频率为1000时最佳。

(2)创建Eclipse,编码代码并编译。

注意:代码编译时应该启用-g选项,这样生成的ELF文件才会带有调试信息,如果不加-g则没有调试信息,无法调试。

(3)按照前面的贴图,配置Eclipse调试选项。Commands的break _start是指对_start下断点,当然可以改成其他函数。

(4)进行调试。

好了,到这里OpenJTAG调试Tiny6410的全部工作已经完成,这时你已经可以顺利的进行Tiny6410的单步调试了,起始这里讲述的调试原理适用于所有支持OpenJTAG的S3C6410开发板,所以如果调试其他开发板也可以按照以上分析进行操作,下面是单步调试的贴图,作为真相吧!

 

最后,提几个需要注意的问题:

(1)在编写Makefile时应该注意添加-g选项,否则elf文件中没有调试信息,无法进行调试

(2)在编写Makefile时不应使用-O优化选项,优化后的代码跟原代码失去了对应关系,调试时跳转错乱。

(3)调试uboot或者内核时需要根据具体的要求修正openjtag.cfg中的频率。

(4)OpenJTAG下载程序时应该使用OpenOCD而不应该使用oflash,如果是用oflash需要将dbgsel引脚拉高,强烈建议直接使用OpenOCD指令进行烧写。对于TQ2440或者MINI2440可以直接使用oflash烧写程序。

关键字:Eclipse  在线调试  ARM11  Tiny6410  OpenJTAG 引用地址:Eclipse在线调试ARM11——Tiny6410+OpenJTAG

上一篇:S3C6410学习——MemoryMap
下一篇:Linux内核的Nand驱动流程分析

推荐阅读最新更新时间:2024-03-16 14:29

VIA再次以小取胜:49美元ARM+Android PC
VIA今天推出了一款只要49美元的微型 Android PC (简称 APC ),基于ARM架构平台,将处理器、存储和各种I/O整合在了一块Neo-ITX规格的超小主板内,长宽尺寸仅有170×85毫米,并兼容Mini-ITX、mATX规格机箱。 这款APC采用了一颗 ARM11架构的WonderMedia WM8750 800MHz处理器 ,整合2D/3D图形核心,支持OpenGL EL 2.0,支持多种视频格式的硬件加速,分辨率最高720p,板载 南亚2×256MB DDR3内存、三星2GB NAND闪存 、百兆以太网卡,输入输出有VGA、HDMI、4×USB 2.0、TF读卡器、音频输出和麦克输入。 操作系统运行的是 定制
[嵌入式]
VIA再次以小取胜:49美元ARM+Android PC
M60 单片机的在线仿真与步进、日志调试
我们对M40 定时器0的代码进行步进调试,掌握调试技巧... 一、前期准备: 安装好keil C51 51单片机编程推荐软件,熟悉它,后续stm32同样可用 Keil(C51)介绍、下载、安装与注册 准备51开发板(STC系列芯片的或其他)或者安装proteus 开发板一般推荐购买一套,仿真的编程环境和真实环境有出入(51开发板一般不足百元) 开始也可以不买,使用proteus仿真51环境入门 51入门实际上不需要多高大上的开发板,最核心的定时器、数码管、基础传感器、通讯都有了。以下也是从网络搜索的,向导单片机训练营用这个,从知乎 /知乎app下单买向导可以赚1元左右佣金,希望能够站着就把1元钱赚了:)
[单片机]
M60 单片机的<font color='red'>在线</font>仿真与步进、日志<font color='red'>调试</font>
Eclipse开发调试ARM裸机程序(五)MMU调试
代码如下: @* @ File:head.S @ 功能:设置SDRAM,将第二部分代码到SDRAM,设置页表,启动MMU, @ 然后跳到SDRAM继续执行 @* @head.S .text .global _start _start: ldr sp, =4096 @ 设置栈指针,以下都是C函数,调用前需要设好栈 bl disable_watch_dog @ 关闭WATCHDOG,否则CPU会不断重启 bl memsetup @ 设置存储控制器以使用SDRAM bl copy_2th_to_sdram @ 将第二部分代码到SDRA
[单片机]
<font color='red'>Eclipse</font>开发<font color='red'>调试</font>ARM裸机程序(五)MMU<font color='red'>调试</font>
S2C发布基于FPGA新的Prototype Ready ARM11和ARM9模块
利用GUC的ARM测试芯片提供一个简单的原型验证环境   S2C今日宣布为其全面的Prototype Ready配件家族新增ARM1176和ARM926 GUC测试芯片模块,用于搭建基于FPGA的原型并将基于FPGA的原型验证板接到用户的目标操作环境。这两款新的ARM测试芯片模块可用于所有S2C SoC/ASIC原型验证硬件包括Virtex-7 TAI Logic Modules, Stratix-4 TAI Logic Modules, Stratix-4 TAI Verification modules, Virtex-6 TAI Logic Modules以及Virtex-6 TAI Verification Modul
[半导体设计/制造]
S2C发布基于FPGA新的Prototype Ready <font color='red'>ARM11</font>和ARM9模块
基于ARM11和DSP的3G视频安全帽设计
1.引言 为提高在高危工作场所现场作业的可控性,本文采用仿生学原理和高集成度设计实现了与人眼同视角的3G视频安全帽。本设计由视频安全帽和腰跨式数据处理终端两部分组成,采用高可靠性航空插头连接。其中图像处理采用三星公司的S3C6410 ARM11处理器和TMS320DM642 DSP处理器组成。本设计结合DSP处理器在视频压缩方面的优势和运行于ARM之上的Linux操作系统在数据管理与任务调度机制方面的出色表现,由DSP完成图像处理功能,并通过高速接口把视频数据传输给嵌入式微处理系统,完成视频数据的传输、存储功能。 2.系统构成 本设计由视频安全帽和腰跨式视频终端两部分组成。视频安全帽中包含1路视频输入、1路音频输入和1
[单片机]
基于<font color='red'>ARM11</font>和DSP的3G视频安全帽设计
ARM 11 裸奔之一 LED循环点亮
init.s ; 注: IMPORT 之前需要有一个空格,否则编译不能通过 IMPORT Main AREA |C$$code|,CODE,READONLY global start start bl Main END main.c #include stdio.h #define rGPMCON (*(volatile unsigned*)(0x7F008820)) #define rGPMDAT (*(volatile unsigned*)(0x7F008824)) #define rGPMPUD
[单片机]
基于VT100的CAN现场总线系统在线调试技术
1.概述 控制器局域网(Controller Area Network,简称CAN)是一种支持分布式和实时控制的串行通信网络,其主要特点是采用多主方式工作,基于报文ID并采用非破坏总线仲裁技术进行优先权仲裁,串行通信,事件触发型,大大减少线束的数量。CAN总线协议最初是由德国BOSCH公司于20世纪80年代提出并用于汽车目的,1993年形成国际标准ISO 11898-1。 由于其高性能、高可靠性及独特的设计,CAN越来越收到人们的重视,已经广泛应用于汽车电子控制、过程工业、机械工业、纺织机械、农用机械、机器人、数控机床、医疗器械、家用电器及传感器等领域发展,并已被公认为几种最有前途的现场总线之—。 Microchip公司的PIC1
[嵌入式]
得可太阳能将携Eclipse平台亮相SNEC 2011展
得可太阳能将携全新Eclipse光伏太阳能电池丝网印刷平台,亮相SNEC光伏大会暨(上海)展览会。届时于2011年2月22日至24日期间,在上海新国际博览中心E3厅360展位上,得可太阳能团队将会展示Eclipse创新的模块化设计理念。 得可太阳能新推出的Eclipse平台,是一个高产能的光伏太阳能电池丝网印刷解决方案,可以同时采用多个印刷头进行运作,大大提升产能。Eclipse平台的可重复性达到六西格玛,精度无可比拟,印刷速度为600毫米/秒,具有先进的处理功能,视觉综合检测功能和卓越的精确定位功能。Eclipse启动了一个全新的、灵活的平台设计理念,结合了一系列在客户现场可装拆的联结模块,可以让厂家轻松地调节产能,从
[半导体设计/制造]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved