四种嵌入式arm调试方法?

四种嵌入式arm调试方法?,第1张

1.指令集模拟器

部分集成开发环境提供了指令集模拟器,可方便用户在PC机上完成一部分简单的调试工作,但是由于指令集模拟器与真实的硬件环境相差很大,因此即使用户使用指令集模拟器调试通过的程序也有可能无法在真实的硬件环境下运行,用户最终必须在硬件平台上完成整个应用的开发。

2.驻留监控软件

驻留监控软件(ResidentMonitors)是一段运行在目标板上的程序,集成开发环境中的调试软件通过以太网口、并行端口、串行端口等通讯端口与驻留监控软件进行交互,由调试软件发布命令通知驻留监控软件控制程序的执行、读写存储器、读写寄存器、设置断点等。

驻留监控软件是一种比较低廉有效的调试方式,不需要任何其他的硬件调试和仿真设备。arm公司的Angel就是该类软件,大部分嵌入式实时 *** 作系统也是采用该类软件进行调试,不同的是在嵌入式实时 *** 作系统中,驻留监控软件是作为 *** 作系统的一个任务存在的。

驻留监控软件的不便之处在于它对硬件设备的要求比较高,一般在硬件稳定之后才能进行应用软件的开发,同时它占用目标板上的一部分资源,而且不能对程序的全速运行进行完全仿真,所以对一些要求严格的情况不是很适合。

3.JTAG仿真器

JTAG仿真器也称为JTAG调试器,是通过ARM芯片的JTAG边界扫描口进行调试的设备。JTAG仿真器比较便宜,连接比较方便,通过现有的JTAG边界扫描口与armCPU核通信,属于完全非插入式(即不使用片上资源)调试,它无需目标存储器,不占用目标系统的任何端口,而这些是驻留监控软件所必需的。另外,由于JTAG调试的目标程序是在目标板上执行,仿真更接近于目标硬件,因此,许多接口问题,如高频 *** 作限制、AC和DC参数不匹配,电线长度的限制等被最小化了。使用集成开发环境配合JTAG仿真器进行开发是目前采用最多的一种调试方式。

4.在线仿真器

在线仿真器使用仿真头完全取代目标板上的CPU,可以完全仿真ARM芯片的行为,提供更加深入的调试功能。但这类仿真器为了能够全速仿真时钟速度高于100MHz的处理器,通常必须采用极其复杂的设计和工艺,因而其价格比较昂贵。java课程认为在线仿真器通常用在arm的硬件开发中,在软件的开发中较少使用,其价格高昂也是在线仿真器难以普及的因素。

论坛上看到的比较。这几天刚拿到STM32F4的评估板,STM32F4这次的卖点就是FPU和DSP指令集,关注了挺长时间,这次就想测试一下STM32F4的浮点性能,如果满足就升级自己飞控的架构。本来用STM32F103+28335双核架构,F28335当浮点处理器用,调试起来比较麻烦,所以一直想换了。测试代码就是用的我飞控的算法,全部使用浮点运算,包含姿态和位置两个7阶和9阶的卡尔曼滤波器,包含大量的矩阵运算以及部分导航算法和PID控制器等,还有部分IF和SWITCH包含跳转的判定语句,相比纯算法算是一个比较综合的运算。测试环境:F28335:CCSV3.3,使用TI优化的数学库,不开优化,程序在RAM里执行。STM32F4:KEILV4.7,使用ARM优化的数学库,不开优化。测试方法:F28335:在飞控算法入口设置断点,清零CCS的CPU计数器(profile->clock),然后STEPOVER,记录下CPU的计数STM32F4:在飞控算法入口设置断点,记录下Register窗口内算states计数器,然后STEPOVER,记录下新的计数器数值,与之前的数值相减得到CPU计数测试结果:F28335:253359个CPU周期,除以150MHZ,大约是1.69msSTM32F4:一共285964个周期,除以168MHZ,大约是1.7ms,比F28335略慢结论就是,对于包含相对较多跳转的综合浮点算法而言,STM32F4似乎并不慢多少。抛开架构因素,从纯浮点运算方面来看的话。STM32F4的FPU加减乘指令VADD.F32、VSUB.F32、VMUL.F32都是单周期指令,而除法VDIV.F32耗费14个周期。例如:a=a/b产生的汇编为:0x08000220ED900A00VLDRs0,[r0,#0x00]0x080002244804LDRr0,[pc,#16]@0x080002380x08000226EDD00A00VLDRs1,[r0,#0x00]0x0800022AEE801A20VDIV.F32s2,s0,s10x0800022E4803LDRr0,[pc,#12]@0x0800023C0x08000230ED801A00VSTRs2,[r0,#0x00]复制代码F28335:F28335的FPU有加减乘法指令,都是双周期的,由于没有硬件除法指令,F28335这里是用软件模拟的浮点除法,汇编可以看到LCR$div_f32.asm字样,需要19个时钟周期。例如:a=a*b,产生的汇编为:0087B2E203MOV32*-SP[4],R0H0087B4E2AFMOV32R1H,*-SP[6],UNCF0087B6E700MPYF32R0H,R1H,R0H0087B87700NOP//需要让流水线等待FPU运算完毕,所以需要NOP0087B9E203MOV32*-SP[4],R0H复制代码除法:0087BDE203MOV32*-SP[4],R0H0087BFE2AFMOV32R1H,*-SP[6],UNCF0087C17640LCR$div_f32.asm:52:71$0087C3E203MOV32*-SP[4],R0H复制代码结论:可见单从浮点处理器来说,F28335是不如F4的FPU的。但是由于F28335是哈佛架构,有较长的流水线,可以在一个时钟周期里完成读取,运算和存储,所以程序连续运行的话,就比ARM快上许多许多,比如执行一次a=a+b只需要5个时钟周期,但是缺点就是一旦要跳转,就必须清空流水线,如果是for(i=0i<1000i++)a=a+b复制代码这样的运算,速度反而要比ARM慢(测试下来单次是17周期,ARM是14).所以说这就是ARM和DSP不同的地方了。看看这次测试比较,感觉环境还是有一定的问题:1、F28335是在RAM中运行,并且两者都是在仿真器环境中进行运算,还是离线在Flash中跑比较靠谱。2、两者编译平台一个是CCS,一个是KEIL,对通用语句的优化,有待商榷。3、ARM和TI的数学库中,各自支持的运算种类不一样。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11842109.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存