您当前的位置:五五电子网电子知识单片机-工控设备ARM单片机基于ARM7内核的嵌入式应用程序调试技术(1) 正文
基于ARM7内核的嵌入式应用程序调试技术(1)

基于ARM7内核的嵌入式应用程序调试技术(1)

点击数:7399 次   录入时间:03-04 11:49:50   整理:http://www.55dianzi.com   ARM单片机

摘要:本文论述了基于ARM7内核的嵌入式应用程序调试技术,针对其中的难点:如何调试固化在ROM中的代码,如何使用软件模拟器模拟外部设备进行了详细分析。
关键字:ARM,调试器,软件模拟器
The debugging of embedded applICation based on ARM7 core
                         Wangjinglin      SujieZhanhengkong
                   (Information Engineering University)
Abstrct:This article discussed the debugging of embedded appliction based on ARM7 core。simulating peripheral  with the SOFtware simulator and source-level debugging of ROM images were analyzed in detail.
Keywords:ARM7,Debugger, Software simulator
引言:
嵌入式处理器是一个复杂的高技术系统,要在短时间内掌握并开发出所有功能是很不容易的,而市场竞争则要求产品能够快速上市,这一矛盾要求嵌入式处理器能够有容易掌握和使用的开发工具平台。提高用户和程序员的时间-投入回报率。
在PDA,STB,DVD等消费类电子产品以及GPS,航空,勘探,测量等军方产品中都得到了广泛应用的ARM处理器具备完善的开发工具平台,包括ARM公司和第三方提供的软件开发工具包、软件模拟器、目标板监控器、基于JTAG接口的在线实时仿真器以及针对不同微控制器(以ARM为内核)的评估板和开发板,给用户提供了不同的选择。
嵌入式应用程序的调试贯穿整个系统的开发过程,它提供纠正软硬件错误改进系统性能的依据,有效使用调试工具能够提高效率,缩短开发周期,增强产品的市场竞争力。
本文为基于ARM7的嵌入式系统开发过程中的调试难点提供了解决方案。

1.ARM公司调试工具介绍
ARM调试工具包括Angel,软件模拟器ARMulator,在线实时仿真器Multi_ICE 或EmbeddeDICE。
(1)Angel系统包括在主机上运行的调试器和在目标机上运行的Monitor, 通过串口通信,具有基本调试、通信、任务管理、异常行为处理等功能,支持C库。缺点是需要占用目标机系统资源,如串口,ROM,RAM等,优点是成本低。
(2)ARMulator独立于处理器硬件,是一种有效的源程序检验和测试工具。但值得注意的是,模拟器毕竟是以一种处理器模拟另一种处理器的运行,在指令执行时间、中断响应、定时器等方面很可能与实际处理器有相当的差别。另外它无法和ICE(在线实时仿真器)一样,仿真嵌入式系统在应用系统中的实际执行情况。
(3)Multi_ICE 或EmbeddedICE通过JTAG端口与目标系统联接,价格昂贵,但使用方法简单,调试快捷方便,无需占用系统资源。它可以设置实时地址和数据独立的断点、单步执行、对ARM内核完全存取和控制、对ASIC系统完全存取、完全存储器存取(读/写)、完全I/O系统存取(读/写)。EmbeddedICE 和Multi-ICE 还可以使嵌入式微处理器存取主机系统的外设,如显示器,键盘输入,和磁盘驱动存储器。

                      串口或并口               JTAG端口


2.调试过程
调试应该解决三个问题: 应用程序在许多极小的用户事件中是否表现出预期行为?应用程序执行是否可靠?应用程序是否满足了设计要求?所以调试分三个阶段:快速定型阶段,验证阶段和有效性确认阶段。
(1)快速定型使程序员熟悉应用程序行为,确定在许多极小的用户事件中程序工作是否符合预想。
(2)验证阶段仿真器应检测到的如下问题:算法错误(如指针溢出,除0)、死源代码、队列溢出、死锁、活锁。
注:当一些事件围绕一个封闭的对象循环触发了一个无限消息流,如果没有其他事件中止这个循环的消息流,消息流将会变得不确定,这种状态叫做活锁。活锁虽然浪费系统资源,但可能不会妨碍系统继续工作,所以当发生活锁时,有可能造成设计正确运转的假象。
(3)有效性确认阶段是检验应用程序表现出的行为是否总是符合预想(有效性),是否从不产生违反规则的行为(安全性),这对于实时系统尤其重要。  

3.调试难点分析
3.1使用软件模拟器模拟外部设备
ARMulator—ARM公司提供的软件模拟器,是一个仿真各种ARM内核结构和指令集的程序。它与ARM调试器联接,提供了在PC主机系统和支持的工作站上开发ARM软件的环境,该环境是硬件独立的。下面以Armulator为例说明使用软件模拟器模拟外部设备的方法。ARMulator包括4个组成部分:
(1)ARM处理器内核模型:处理ARM内核与调试器之间的所有通信,不允许用户修改。
(2)存储器接口:在ARM模型与存储器模型或存储器管理单元模型之间传递数据。
(3)协处理器接口:处理ARM内核与协处理器之间的通信。
(4)操作系统接口:提供程序运行环境。
   ARMulator核心能够表现处理器的内核和高速缓存,但是在C源代码中描述的存储器系统可以由用户设定为任意目标系统模型。ARMulator核心与存储器模型之间的接口体现了ARM内核的引脚接口,包括为该存储器模型在nFIQ和nIRQ引脚上产生中断的能力。
用户通过修改或重写缺省的模型,几乎可以模拟所有基于ARM处理器的系统,用来调试硬件相关代码。当模拟外设时,用户需要ARMulator 能够仿真外部事件的发生,为此ARMulator提供了两个例程辅助事件调度:ARM_Time用来返回从系统复位到当前的时间片数目;ARMul_ScheduleEvevt允许在一定时间后调用某个程序。
下面通过一个仿真并行端口的实例来说明具体方法,要求该并行口产生一个中断,然后从一个文本文件中读出一个字符放入存储器中。实现步骤如下:
(1)建立新的存储器模型。首先拷贝一份ARMulator的存储器模型,作相应修改,创建parallel.c文件,添加两个变量:中断产生标志和指向要访问的文本文件的指针,添加一个新程序parallel_set_irq用来触发中断并设置中断产生标志为1。
(2)修改models.h和makefile。在models.h中添加MEMORY(Parallel)作为新的存储器模型的根入口。编译parallel.c产生目标文件添加到makefile中的目标文件列表中。
(3)添加新模型到ARMulator,并在PC机上使用微软的Visual C++重建“ARMULATE.DLL”,产生新的ARMulator。
(4)修改armul.cnf,选择该存储器模型。
当应用程序访问一个特定存储器地址(如0x123450)时,ARMul_ScheduleEvent函数被激活。ARMul_ScheduleEvent函数在20000个时间片后调用parallel_set_irq,从而产生一个中断服务请求,系统进入中断服务程序(由应用程序设置中断向量安装ISR),中断服务程序从另一个预定义的位置(如 0x123460 )读出一个字符,并清除并行端口的中断源,返回应用程序。
这种方法与用户使用的ARM调试器没有关系,因为它是软件模拟器的一部分,不属于调试器。这是一项非常有用的技术,可以扩展到用C语言为整个系统建立模型。例如,它可能模拟一个PDA系统,包括键盘,定时器,并行接口,液晶显示屏等等。




本文关键字:技术  嵌入式  应用程序  ARM单片机单片机-工控设备 - ARM单片机