调试嵌入式运用有许多种方法。规划者运用包含电路内置仿真器(in-circuit emulator,ICE)和电路内置调试器(in-circuit debugger,ICD)的调试东西能够快速构建出体系原型,协助规划者在树立原型阶段和终究测验阶段查找硬件和软件中的问题。在调试进程中,本钱和易用性是人们首要关怀的问题,比较ICE东西,规划者或许更喜爱运用仿真器来调试代码段,由于仿真器能够直接在PC上运转,不需要映射到方针硬件上。
仿真器运用起来十分便利,经过它们开发人员能够了解一款新式的MCU,或许了解一套新的集成开发环境(integrated development environment ,IDE)东西包,而不需要触摸方针硬件。有的时分,规划者能够免费阅读某个供货商的一切MCU产品。例如,用户能够从官方网站上免费下载到 Microchip的MPLAB IDE 和 MPLAB SIM仿真器(如图1所示)。
图1 许多仿真器(例如Microchip的MPLAB SIM)都为用户供给了快速调试运用程序所需的图形用户界面
仿真器供给了特别调试功用
一般来说,仿真器运转在IDE环境下,而且具有与其他调试引擎相似的功用。用户在开始运用仿真器时一般用它来开发代码,当硬件规划完成后,能够用硬件调试器进行测验作业。仿真器能够完成的根本调试功用包含:履行代码验证其功用是否契合规划规范;复位方针体系从头运转运用程序;在断点处暂停程序履行;查看和修正存储内容与变量。
最新的仿真器具有某些硬件调试器所不具有的共同功用,运用这一类仿真器能够完成更多的功用。例如,能够轻松完成杂乱状况下的中止履行——这是任何ICE和%&&&&&%D东西都不具有的。经过事情计数和断点履行,用户能够构造出杂乱事情。运用这种杂乱断点,能够描绘出代码行为反常的状况,追寻反常状况下的代码。这种方法比较在代码中设置简略断点和跳步履行,能够更快速地发现bug。经过仿真剖析代码
规划者能够运用仿真器呼应引脚的输入输出信号,仿照MCU外设部件的行为。为了完成这一功用,有些高档仿真器就供给了能够模仿信号的杂乱鼓励发生器。运用这一功用,用户能够经过向固件模块加载输入信号的方法来测验固件模块,例如,能够发生两个相隔50ns的中止信号。这种模仿信号的方法是运用真实的硬件很难做到的。鼓励发生器能够向器材引脚或仿真器内的寄存器发送信号。经过运用USART以I/O设备的方法或许运用寄存器日志的方法,能够将仿真器的行为记录到一个log文件中以便于后续剖析。
大多数仿真器支撑三种鼓励源。手动触发能够经过鼠标点击、发生重复波形的循环式鼓励,以及向引脚、寄存器或许寄存器中的某些位加载数据的接连型鼓励来发生。这些接连型数据能够输入对话框,或许来自于某个文件。仿真器还能够模仿外设部件,然后比如A/D转换器、I/O引脚、串行通讯设备和定时器等设备就能够被激活。这些外设能够选用仿真波形和模仿数字信号的输入,能够承受手艺输入来模仿中止和传感器读数(如图2所示)。
图2 仿真器一般支撑三种鼓励源而且具有便利的界说和装备功用
进步代码功用
大多数高档仿真器都能够将运用程序在方针体系上的履行进程与源代码相关起来,使规划者能够单步履行高档言语代码,例如C代码,即便每条C句子或许会生成多行机器代码。相同,文件寄存器中的存储器内容也能够与程序中运用的变量相关起来。因而,假如某个浮点数跨过多个机器文件寄存器,规划者就能够在调查点监测到该寄存器的内容,并以浮点表明方法显示出来。
运用仿真器还能够优化程序例程,准确丈量并调整某些要害代码的履行时刻。用户能够运用仿真器的秒表功用对一段代码的履行进程进行计时。依据处理器的频率,就能够对所履行的指令进行秒表计时。
秒表功用不是仿真器中丈量时刻的仅有方法。某些运用(例如电机操控)不允许在某个断点处中止运转。在这些状况下,将程序流和寄存器读写成果保存在追寻缓冲器(trace buffer)内便是一种好的代替方法。追寻缓冲器在指令履行的时分将其记录下来,并给每条指令打上一个时刻戳。这样,当捕捉到追寻缓冲器内的事情后,就能够对其进行计时了。例如,捕捉到了一系列中止,那么就能够很容易地计算出中止之间的时刻距离,以及每个中止履行所花的总时刻。
仿真器能够将寄存器值的改变状况记录到文件中,用于功用剖析。运用仿真器,工程师能够调查出某个算法对多种输入的呼应状况,然后对其进行测验或改善。例如,可针对多组已存数据(例如运用方针硬件从A/D转换器成果寄存器中读取的数据)进行快速傅立叶改换(FFT),可是要对所期望看到的数据类型进行总数操控。