调试

实践表明,一个电子装置,即使按照设计的电路参数进行安装,往往也难于达到预期的效果。这是因为人们在设计时,不可能周全地考虑各种复杂的客观因素(如元件值的误差、器件参数的分散性、分布参数的影响等),必须通过安装后的测试和调整,来发现和纠正设计方案的不足,然后采取措施加以改进,使装置达到预定的技术指标。因此,调试电子电路的技能对从事电子技术及其相关领域工作的人员来说,是不应缺少的。

调试的常用仪器有:稳压电源、万用表、示波器、频谱分析仪和信号发生器等。

电子电路调试包括测试和调整两个方面。

调试的意义有二:
①是通过调试使电子电路达到规定的指标;
②是通过调试发现设计中存在的缺陷并予以纠正。

1、电子电路调试的一般步骤

传统中医看病讲究“望、闻、问、切”,其实调试电路也是如此。

首先“望”,即观察电路板的焊接如何,成熟的电子产品一般都是焊接出的问题;第二“闻”,呵呵,这个不是说先把电路板闻下,而是说通电后听电路板是否有异常响动,不该叫的叫了,该叫的不叫;第三“问”,如果是自己第一次调试,不是自己设计的要问电源是多少?别人是否调过?有什么问题?第四“切”,元器件有没焊全、芯片焊接是否正确、不易观察的焊点是否焊好?一般调试前做好这几步就可发现不少问题。

根据电子电路的复杂程度,调试可分步进行:对于较简单系统,调试步骤是:电源调试→单板调试→联调。对于较复杂的系统,调试步骤是:电源调试→单板调试→分机调试→主机调试→联调。

由此可明确三点:
(1) 不论简单系统还是复杂系统,调试都是从电源开始入手的;
(2) 调试方法一般是先局部(单元电路)后整体,先静态后动态;
(3) 一般要经过测量→调整→再测量→再调整的反复过程;对于复杂的电子系统,调试也是一个“系统集成”的过程。

在单元电路调试完成的基础上,可进行系统联调。例如数据采集系统和控制系统,一般由模拟电路、数字电路和微处理器电路构成,调试时常把这3部分电路分开调试,分别达到设计指标后,再加进接口电路进行联调。联调是对总电路的性能指标进行测试和调整,若不符合设计要求,应仔细分析原因,找出相应的单元进行调整。不排除要调整多个单元的参数或调整多次,甚至有修正方案的可能。

2、电子电路调试的具体步骤

(1) 通电观察:通电后不要急于测量电气指标,而要观察电路有无异常现象,例如有无冒烟现象,有无异常气味,手摸集成电路外封装,是否发烫等。如果出现异常现象,应立即关断电源,待排除故障后再通电。

(2) 静态调试:静态调试一般是指在不加输入信号,或只加固定的电平信号的条件下所进行的直流测试,可用万用表测出电路中各点的电位,通过和理论估算值比较,结合电路原理的分析,判断电路直流工作状态是否正常,及时发现电路中已损坏或处于临界工作状态的元器件。通过更换器件或调整电路参数,使电路直流工作状态符合设计要求。

(3) 动态调试:动态调试是在静态调试的基础上进行的,在电路的输入端加入合适的信号,按信号的流向,顺序检测各测试点的输出信号,若发现不正常现象,应分析其原因,并排除故障,再进行调试,直到满足要求。

测试过程中不能仅凭感觉或印象,要始终借助仪器观察。使用示波器时,最好把示波器的信号输入方式置于“DC”挡,通过直流耦合方式,可同时观察被测信号的交、直流成分。

通过调试,最后检查功能块和整机的各种指标(如信号的幅值、波形形状、相位关系、增益、输入阻抗和输出阻抗、灵敏度等)是否满足设计要求,如必要,再进一步对电路参数提出合理的修正。

3、电子电路调试中的若干问题

(1) 根据待调试系统的工作原理(原理图和PCB)拟定调试步骤和测量方法,确定测试点,并在图纸上和板子上标出位置,画出调试数据记录表格等。

(2) 搭设调试工作台,工作台配备所需的调试仪器,仪器的摆设应操作方便,便于观察。学生往往不注意这个问题,在制作或调机时工作台很乱,工具、书本、衣物等与仪器混放在一起,这样会影响调试。

特别提示:在制作和调试时,一定要把工作台布置的干净、整洁。这便是“磨刀不误砍柴工”。

(3) 对于硬件电路,应为被调试系统选择测量仪表,测量仪表的精度应优于被测系统;对于软件调试,则应配备微机和开发工具。

(4) 电子电路的调试顺序一般按信号流向进行,将前面调试过的电路输出信号作为后一级的输入信号,为最后统调创造条件。

(5) 选用可编程逻辑器件实现的数字电路,应完成可编程逻辑器件源文件的输入、调试与下载,并将可编程逻辑器件和模拟电路连接成系统,进行总体调试和结果测试。

(6) 在调试过程中,要认真观察和分析实验现象,做好记录,保证实验数据的完整可靠。

4、调试前的工作

电路安装完毕,通常不宜急于通电,应该先认真检查一下。

检查内容包括:

(1) 连线是否正确:检查电路连线是否正确,包括错线(连线一端正确,另一端错误)、少线(安装时完全漏掉的线)和多线(连线的两端在电路图上都是不存在的)。

查线的方法通常有两种:1) 按照电路图检查安装的线路:这种方法的特点是,根据电路图连线,按一定顺序逐一检查安装好的线路,由此可比较容易地查出错线和少线。2) 按照实际线路来对照原理电路进行查线:这是一种以元件为中心进行查线的方法。把每个元件(包括器件)引脚的连线一次查清,检查每个去处在电路图上是否存在,这种方法不但可以查出错线和少线,还容易查出多线。

为了防止出错,对于已查过的线通常应在电路图上做出标记,最好用指针式万用表“Ω×1”挡,或数字式万用表“Ω挡”的蜂鸣器来测量,而且应直接测量元器件引脚,这样可以同时发现接触不良的地方。

(2) 元器件安装情况
检查元器件引脚之间有无短路;连接处有无接触不良;二极管、三极管、集成器件和电解电容极性等是否连接有误。

(3) 电源供电(包括极性)、信号源连线是否正确。

(4) 电源端对地是否存在短路。
若电路经过上述检查,并确认无误后,就可转入调试。

5、调试方法

调试包括测试和调整两个方面。

所谓电子电路的调试,是以达到电路设计指标为目的而进行的一系列的测量→判断→调整→再测量的反复进行过程。为了使调试顺利进行,设计的电路图上最好标明各点的电位值,相应的波形图以及其它主要数据。调试方法通常采用先分调后联调(总调)。

我们知道,任何复杂电路都是由一些基本单元电路组成的,因此,调试时可以循着信号的流向,逐级调整各单元电路,使其参数基本符合设计指标。这种调试方法的核心是:把组成电路的各功能块(或基本单元电路)先调试好,并在此基础上逐步扩大调试范围,最后完成整机调试。采用先分调,后联调的优点是:能及时发现问题和解决问题。新设计的电路一般采用此方法。

对于包括模拟电路、数字电路和微机系统的电子装置更应采用这种方法进行调试。因为只有把三部分分开调试后,分别达到设计指标,并经过信号及电平转换电路后才能实现整机联调。否则,由于各电路要求的输入、输出电压和波形不匹配,盲目进行联调,就可能造成大量的器件损坏。

除了上述方法外,对于已定型的产品和需要相互配合才能运行的产品也可采用一次性调试。

6、调试中的注意事项

调试结果是否正确,很大程度上受测量正确与否和测量精度的影响。为了保证调试的效果,必须减小测量误差,提高测量精度。为此,需注意以下几点:

(1) 正确使用测量仪器的接地端

凡是使用地端接机壳的电子仪器进行测量时,仪器的接地端应和放大器的接地端连接在一起,否则仪器机壳引入的干扰不仅会使放大器的工作状态发生变化,而且将使测量结果出现误差。根据这一原则,调试发射极偏置电路时,若需测量VCE,不应把仪器的两端直接接在集电极和发射极上,而应分别对地测出VC、VE,然后将二者相减得VCE。若使用干电池供电的万用表进行测量,由于电表的两个输入端是浮动的,所以允许直接跨接到测量点之间。

(2) 测量电压所用仪器的输入阻抗必须远大于被测处的等效阻抗

若测量仪器输入阻抗小,则在测量时会引起分流,给测量结果带来很大误差。

(3) 测量仪器的带宽必须大于被测电路的带宽

例如:MF-20型万用表的工作频率为20~20000 Hz。如果放大器的fh =100 kHz,我们就不能用 MF-20来测试放大器的幅频特性,否则,测试结果就不能反映放大器的真实情况。

(4) 要正确选择测量点

用同一台测量仪器进行测量时,测量点不同,仪器内阻引进的误差大小将不同。例如,对于图1所示电路,测C1点电压VC1时,若选择e2为测量点,测得VE2,根据VCl=VE2+VBE2求得的结果,可能比直接测Cl点得到的VC1的误差要小得多。所以出现这种情况,是因为Re2较小,仪器内阻引进的测量误差小。

(5) 测量方法要方便可行

需要测量某电路的电流时,一般尽可能测电压而不测电流,因为测电压不必改动被测电路,测量方便。若需知道某一支路的电流值,可以通过测取该支路上电阻两端的电压,经过换算而得到。

(6) 调试过程中,不但要认真观察和测量,还要善于记录

记录的内容包括实验条件、观察的现象、测量的数据、波形和相位关系等。只有有了大量可靠的实验记录并与理论结果加以比较,才能发现电路设计上的问题,完善设计方案。

7、调试时出现故障的解决方法

要认真查找故障原因,切不可一遇故障解决不了就拆掉线路重新安装。因为重新安装的线路仍可能存在各种问题,如果是原理上的问题,即使重新安装也解决不了问题。我们应当把查找故障,分析故障原因,看成一次好的学习机会,通过它来不断提高自己分析问题和解决问题的能力。

(1) 检查故障的一般方法

故障是不期望但又不可避免的电路异常工作状况。分析、寻找和排除故障是电气工程人员必备的实际技能。对于一个复杂的系统来说,要在大量的元器件和线路中迅速、准确地找出故障是不容易的。一般故障诊断过程,就是从故障现象出发,通过反复测试,做出分析判断,逐步找出故障原因的过程。

(2) 故障现象和产生故障的原因

1) 常见的故障现象:放大电路没有输入信号,而有输出波形。放大电路有输入信号,但没有输出波形,或者波形异常。串联稳压电源无电压输出,或输出电压过高且不能调整,或输出稳压性能变坏、输出电压不稳定等。振荡电路不产生振荡。计数器输出波形不稳,或不能正确计数。收音机中出现“嗡嗡”交流声和“啪啪”的汽船声等。以上是最常见的一些故障现象,还有很多奇怪的现象,在这里就不一一列举了。

2) 产生故障的原因:故障产生的原因很多,情况也很复杂,有的是一种原因引起的简单故障,有的是多种原因相互作用引起的复杂故障。因此,引起故障的原因很难简单分类。这里只能进行一些粗略的分析。

对于定型产品使用一段时间后出现故障,故障原因可能是元器件损坏,连线发生短路或断路(如焊点虚焊、接插件接触不良、可变电阻器、电位器、半可变电阻等接触不良、接触面表面镀层氧化等),或使用条件发生变化(如电网电压波动,过冷或过热的工作环境等)影响电子设备的正常运行。

对于新设计安装的电路来说,故障原因可能是:实际电路与设计的原理图不符;元器件焊接错误、元器件使用不当或损坏;设计的电路本身就存在某些严重缺点,不满足技术要求;连线发生短路或断路等。

仪器使用不正确引起的故障,如示波器使用不正确而造成的波形异常或无波形,接地问题处理不当而引入干扰等。

各种干扰引起的故障。

(3) 检查故障的一般方法:查找故障的顺序可以从输入到输出,也可以从输出到输入。查找故障的一般方法有:

1) 直接观察法

直接观察法是指不用任何仪器,利用人的视、听、嗅、触等作为手段来发现问题,寻找和分析故障。直接观察包括不通电检查和通电观察。

检查仪器的选用和使用是否正确;电源电压的等级和极性是否符合要求;电解电容的极性、二极管和三极管的管脚、集成电路的引脚有无错接、漏接、互碰等情况;布线是否合理;印刷板有无断线;电阻电容有无烧焦和炸裂等。

通电观察元器件有无发烫、冒烟,变压器有无焦味,电子管、示波管灯丝是否亮,有无高压打火等。

此法简单,也很有效,可作初步检查时用,但对比较隐蔽的故障无能为力。

2) 用万用表检查静态工作点

电子电路的供电系统,半导体三极管、集成块的直流工作状态(包括元、器件引脚、电源电压)、线路中的电阻值等都可用万用表测定。当测得值与正常值相差较大时,经过分析可找到故障。

顺便指出,静态工作点也可以用示波器“DC”输入方式测定。用示波器的优点是:内阻高,能同时看到直流工作状态和被测点上的信号波形以及可能存在的干扰信号及噪声电压等,更有利于分析故障。

3) 信号寻迹法

对于各种较复杂的电路,可在输入端接入一个一定幅值、适当频率的信号(例如,对于多级放大器,可在其输入端接入 f=1000 Hz的正弦信号),用示波器由前级到后级(或者相反),逐级观察波形及幅值的变化情况,如哪一级异常,则故障就在该级。这是深入检查电路的方法。

4) 对比法

怀疑某一电路存在问题时,可将此电路的参数与工作状态相同的正常电路的参数(或理论分析的电流、电压、波形等)进行一一对比,从中找出电路中的不正常情况,进而分析故障原因,判断故障点。

5) 部件替换法

有时故障比较隐蔽,不能一眼看出,如这时你手头有与故障仪器同型号的仪器时,可以将仪器中的部件、元器件、插件板等替换有故障仪器中的相应部件,以便于缩小故障范围,进一步查找故障。

6) 旁路法

当有寄生振荡现象时,可以利用适当容量的电容器,选择适当的检查点,将电容临时跨接在检查点与参考接地点之间,如果振荡消失,就表明振荡是产生在此附近或前级电路中。否则就在后面,再移动检查点寻找之。应该指出的是,旁路电容要适当,不宜过大,只要能较好地消除有害信号即可。

7) 短路法

就是采取临时性短接一部分电路来寻找故障的方法。短路法对检查断路性故障最有效。但要注意对电源(电路)是不能采用短路法的。

8) 断路法

断路法用于检查短路故障最有效。断路法也是一种使故障怀疑点逐步缩小范围的方法。例如,某稳压电源因接入一带有故障的电路,使输出电流过大,我们采取依次断开电路的某一支路的办法来检查故障。如果断开该支路后,电流恢复正常,则故障就发生在此支路。

实际调试时,寻找故障原因的方法多种多样,以上仅列举了几种常用的方法。这些方法的使用可根据设备条件,故障情况灵活掌握,对于简单的故障用一种方法即可查找出故障点,但对于较复杂的故障则需采取多种方法互相补充、互相配合,才能找出故障点。

在一般情况下,寻找故障的常规做法是:先用直接观察法,排除明显的故障。再用万用表(或示波器)检查静态工作点。信号寻迹法是对各种电路普遍适用而且简单直观的方法,在动态调试中广为应用。

应当指出,对于反馈环内的故障诊断是比较困难的,在这个闭环回路中,只要有一个元器件(或功能块)出故障,则往往整个回路中处处都存在故障现象。寻找故障的方法是先把反馈回路断开,使系统成为一个开环系统,然后再接入一适当的输入信号,利用信号寻迹法逐一寻找发生故障的元器件(或功能块)。

来源:电源网订阅号

围观 401

嵌入式软件开发流程

参照嵌入式软件的开发流程。第一步:工程建立和配置。第二步:编辑源文件。第三步:工程编译和链接。第四步:软件的调试。第五步:执行文件的固化。

在整个流程中,用户首先需要建立工程并对工程做初步的配置,包括配置处理器和配置调试设备。编辑工程文件,包括自己编写的汇编和C语言源程序,还有工程编译时需要编写的链接脚本文件,调试过程中需要编写存储区映像文件和命令脚本文件,以及上电复位时的程序运行入口的启动程序文件。

对后四种文件的理解很重要,其作用解释如下。

(1)链接脚本文件:在程序编译时起作用。该文件描述代码链接定位的有关信息,包括代码段,数据段,地址段等,链接器必须使用该文件对整个系统的代码做正确的定位。在SDRAM中调试程序、在FLASH中调试或固化后运行的链接脚本文件应加以区分。(在IDE开发环境中使用扩展名*.ld)

(2)命令脚本文件:在SDRAM中调试程序时起作用。在集成环境与目标连接时、软件调试过程中以及目标板复位后,有时需要集成环境自动完成一些特定的操作,比如复位目标板、清除看门狗、屏蔽中断寄存器、存储区映射等。这些操作可以通过执行一组命令序列来完成,保存一组命令序列的文本文件称为命令脚本文件(在 IDE开发环境中使用扩展名*.cs)。

(3)存储区映像文件:在SDRAM中调试程序时起作用。在软件调试过程中访问非法存储区在部分处理器和目标板上会产生异常,如果异常没有处理,则会导致软件调试过程无法继续,为了防止以上问题并调整仿真器访问速度以达到最合适的水平,提供这样一种用于描述各个存储区性质的文件叫存储区映像文件(在IDE开发环境中使用扩展名*.map)。

在程序的调试过程中可以选择使用存储区映像文件*.map和命令脚本文件*. cs配合程序的调试。

(4)启动文件:它主要是完成一些和硬件相关的初始化的工作,为应用程序做准备。一般,启动代码的第一步是设置中断和异常向量;第二步是完成系统启动所必须的寄存器配置;第三步设置看门狗及用户设计的部分外围电路;第四步是配置系统所使用的存储区分配地址空间; 第五步是变量初始化;第六步是为处理器的每个工作模式设置栈指针;最后一步是进入高级语言入口函数(Main函数)。

中断程序设计

中断调试方面可以采用类似矢量中断动态处理方式,让中断对应的确定地址代码调转到RAM的固定地址处,定义一个函数指针指向该固定地址,就可以随时通过替换RAM固定地址处的代码,实现动态改变中断处理函数。

具体方法是:

(1)将中断源函数指针定义在RAM中相对的固定地址,建立中断矢量表;

void SetInterrupt (U32 vector, void (*handler)()){ InterruptHandlers[vector] = handler;}

(2)在程序中,调用具体某中断源的中断处理函数;

如: SetInterrupt(IIC_INT,IICWriteIsr);

/* 声明IIC中断处理函数,其中IIC_INT为 IIC中断源序号,IICWriteIsr为 IIC的写中断处理函数 */

(3)在0x18处的IRQ或0x1C处的FIQ中断入口函数中,获取中断源、清除中断挂起标志、通过已定义的中断源函数指针进入用户具体某中断处理程序。

void ISR_IrqHandler(void){ IntOffSet = (unsigned int)INTOFFSET; Clear_PendingBit(IntOffSet>>2) ;(*InterruptHandlers[IntOffSet>>2])();// 调用具体某中断处理程序}

采用动态的中断处理方法,在中断源较多的情况下,中断响应时间和程序性能得到优化。另外,在调试方面,此处理方法具有便于跟踪调试的优点,并且根据需要,可以方便变换中断处理函数。

中断调试

软件调试可以在SDRAM中或FLASH中进行。在SDRAM中,读写方便,访问速度快。一般软件调试应在RAM中完成,但当RAM空间小于FLASH程序空间,程序只能在FLASH运行和调试时,或者用户希望了解程序在FLASH中实际运行情况时,就可以在FLASH中进行程序调试。

进行中断调试时,应注意中断入口位于SDRAM中或FLASH中0x18或0x1c地址,链接脚本文件必须使整个系统的代码正确定位于0x0起始处,但SDRAM或FLASH对应的链接脚本文件及工程配置注意区别。

(1)程序在SDRAM中运行

在SDRAM中调试,使用SDRAM对应的链接脚本文件。调试过程需要以下几步:编译、链接工程;连接仿真器和电路板;下载程序(在IDE开发环境中使用扩展名*.elf);调试。

下载程序前必须启动命令脚本文件完成前述的一些特定的操作,命令脚本文件的启动在连接仿真器时自动进行,其中存储区映射应与程序在SDRAM中运行时相同,保证整个系统的代码正确定位于0x0起始处。下载程序的起始地址也为0x0,下载成功后便可进行调试工作。

(2)程序在FLASH中运行

在FLASH中调试,使用FLASH对应的链接脚本文件。调试过程需要以下几步:编译、链接工程;连接仿真器和电路板;程序格式转换(*.elf转换为*.bin);固化*.bin程序;调试。

连接仿真器后不需要下载程序,存储区映射由本身工程中启动文件运行完成,不需要命令脚本文件。在本环境调试过程中,可以设置两个硬件断点。

(3)程序从FLASH中调到SDRAM中运行

在某些应用场合,强调程序运行速度的情况下,希望程序在SDRAM中运行,这样就需要将FLASH中存储的程序,在系统上电后搬运到SDRAM某空间位置,然后自动运行。这种所谓的Bootloader技术,在DSP系统中常被采用。

调试过程分两步:

(a)首先将用户程序在SDRAM中调试通过,然后将*.bin文件固化到FLASH某一非0扇区地址空间;

(b)将自己编写的Bootloader搬运程序调试通过并将Bootloader.bin文件固化到FLASH的 0扇区地址空间,搬运程序在系统上电后,将(a)中FLASH某一非0扇区地址空间存储的程序,搬运到在SDRAM调试中同样的空间位置,实现程序在SDRAM中运行的目的。

另外注意,因为用户实际的程序中断入口必须位于FLASH的0x18或0x1c地址,所以Bootloader搬运程序还应具有中断入口的跳转功能,即把PC指针由此转向处于SDRAM空间的中断程序入口表,就是整个用户程序被搬运到SDRAM的那一位置。

如:LDR PC, =HandleIRQ
// HandleIRQ位于SDRAM空间中断程序入口表

来源:网络(本文仅供学习参考使用,版权归作者所有)

围观 365

摘要

J-Scope是SEGGER公司推出的,可以在目标MCU运行时,实时分析数据并图形化显示的软件。我们一起来了解一下J-Scope吧。

我们在前四篇的文档中介绍了MCU向调试终端输出信息的方法。今天就介绍一个更炫更酷、可以图形化显示数据的调试法宝—JScope。

J-Scope是SEGGER公司推出的,可以在目标MCU运行时,实时分析数据并图形化显示的软件。它不需要像SWO那样需要MCU上面额外的引脚,而是使用标准的调试接口。J-Link驱动4.90之后的版本都有这个软件哦。

J-Scope可以像示波器一样显示多个变量的值,通过读取一个ELF文件,允许选择一定数量的变量可视化,如图 1所示。你可以简单的将目标MCU连接到J-Link,并启动J-Scope软件。

图 1 J-Scope图形化显示变量

使用J-Scope的同时还可以并行使用调试环境,扩展工程师的IDE的调试经验。更加方便我们分析调试过程中的数据。

J-Scope使用方法也很简单,首先在Segger目录下打开J-Scope.exe,弹出如图 2所示的对话框,选择需要调试的elf文件,单击OK。

图 2 J-Scope配置对话框

然后在如图 3所示的对话框添加变量。注意添加的变量在程序中应该是全局变量。

图 3 添加变量对话框

单击OK,选择运行之后,我们就可以看到J-Scope绘制出来的精美的曲线了。

这个工具支持的MCU内核也非常多,如图 4所示。

图 4 J-Scope支持的内核

可能有的读者好奇了,最多能观察多少个变量,采样率能达到多少呢?其实变量的多少和采样率的大小取决于你的调试工具,如表 1所示。

表 1 变量个数和采样频率

当然,如果你的J-link是从淘宝50元买来的,那么最高采样频率也就是50Hz了。

有了J-Scope很大程度上方便了我们的调试。那么有没有其它的软件在具备J-Scope优点的同时,功能更加强大呢?敬请大家关注下一篇文档。

文章来源: 周立功单片机

(直接点击图片可进入调查页面)

开发板测评图片
围观 595

我们前三篇的文档中介绍的调试方法,都因为各种原因而不能在所有的MCU上做到通用,而今天这一切将发生改变。现在就一起来看一下这个神奇的调试工具-RTT。

RTT( Real Time Terminal)是SEGGER公司新出的可以在嵌入式应用中与用户进行交互的实时终端。J-Link驱动4.90之后的版本都有这个软件哦。

用RTT可以从目标MCU上输出信息的同时也可以非常高速的向应用程序发送信息,并且不影响MCU的实时性。其实现原理就是J-link与MCU共享内存,具体实现细节感兴趣的读者可以自己去查阅下资料,本文以应用为主。RTT的工作框图如图 1所示。MCU通过J-link与电脑连接并将打印信息输出到电脑上,电脑同时可以通过键盘等向MCU发送数据。

图 1 RTT工作框图

如果你想使用它,操作也非常简单,首先从官网下载RTT代码,然后把如图 2所示的4个文件添加到你的工程中。并且在主函数文件的起始处添加SEGGER_RTT.h文件。如下所示。

#include "SEGGER_RTT.h"

图 2 需要添加到工程的文件

然后我们就可以直接在主函数中调用SEGGER_RTT_printf函数来打印调试信息了,该函数用法和printf函数类似,只是多了一个参数用来指定RTT通道。其中通道0,就是我们在调试时使用的通道。在主函数中添加如下代码。

SEGGER_RTT_printf(0,"Times %d\r\n",++u32Counter);

u32Counter 这个变量每次打印完之后都会递增。我们把程序编译,然后进入调试模式,在开始菜单下打开J-link RTT Client,可以看到如图 3所示的信息。

如果已经正常连接,就会打印出入红色框内的信息,标明RTT版本号和J-link固件版本号等,如果没有这些信息则表示连接异常。点击全速运行之后,打印出的信息如图 3所示。

图 3 RTT打印信息

是不是感觉很酷?只需要简单的添加几个文件,就可以直接调用SEGGER_RTT_printf函数打印输出了。没有复杂的工程配置,没有MCU内核的限制,并且打印字符还非常的流畅,好像回到了用VC6.0编写Win32控制台程序的时代一样。

与前面介绍的SWO、Semihosting,相比,RTT字符输出更快。输出82个字符所需要的时间如图 4所示。

图 4 输出字符速率对比

通过与前面的3篇文档进行对比,我们发现每个调试工具都各有长短,关于它们的具体比较请参考表 1。

表 1 调试工具比较

通过对上面表格的对比,我们可以根据不同的情况选择合适的工具。加快我们的开发进度。

但是有的时候,我们可能还需要将一个变量以曲线的形式形象的表现出来。比如说传感器的变化趋势、电机转速等,这个时候,如果再去开发一个上位机,又加大了开发任务。那么有没有一个工具,可以不用占用MCU外设资源,又可以形象的看到波形呢?

文章来源:周立功单片机

围观 573

在上一篇文档中,我们向大家分享了如何使用IAR本身自带半主机(semihost)模式来调试程序,但是每10ms输出一个字符的速度实在让人难以接受。今天就向大家介绍一个输出速率更快的,使用同样方便的调试方法-SWO引脚的使用。

在Cortex-M3\M4系列MCU中,内核的调试组件都有一个仪器化跟踪单元(ITM)。ITM的一个主要的用途,就是支持调试信息的输出(例如,printf格式输出)。ITM包含了32个刺激端口,允许不同的软件把数据输出到不同的端口,从而让调试主机可以把它们的信息分离开。每个端口都可以独立的使能/除能,还可以允许或禁止用户进程对它执行写操作。那么这些与MCU的SWO引脚有什么关系呢?刚才我们有说ITM包含了32个端口,其中SWO引脚,就是ITM模块的端口0,我们可以直接用它来输出一些调试信息。那么现在就看看如何使用它吧。

把MCU的SWO引脚同J-link等调试工具连接在一起,因为K64开发板已经直接引出SWD接口了,所以我们就直接连接了J-Link。如图 2所示,第6脚就是SWO引脚。

图 2 SWD接口

当MCU连接好J-link之后,我们在工程中的主函数起始处添加stdio.h文件,如下所示。

#include

接下来为了能直接调用printf函数格式化输出,又需要用到我们之前提到的重定向技术了,只是这次不是重定向到串口,而是ITM模块的0通道,即SWO引脚。如程序清单 1所示。

程序清单 1 重定向代码
int fputc(int ch, FILE *f) {
ITM_SendChar(ch);
return(ch);
}

其中ITM_SengChar函数是core_cm4.h内核文件里定义的内联函数,我们可以直接调用。

完成重定向之后,我们写了个定时打印HelloWorld的程序。打开Keil工程的【Options for Target】->【debug】->【settings】->【Trace】,对Trace选项卡进行如图 3所示的配置。

图 3 Trace选项卡配置

点击确定之后,进入调试模式,打开【View】->【Serial Windows】->【Debug(printf) Viewer】,这时我们就可以看到MCU通过J-link向编译器输出的打印信息了,如图 4所示。打印速度还很快哦。

图 4 Debug Viewer窗口

到此我们算是学会了使用SWO引脚来调试输出了,是不是很酷哦。细心的网友可能会发现为什么Cortex-M0\M0+内核的MCU没有找到SWO引脚呢?这是因为它们采用的还是ARM-V6的老架构,内核的调试组件没有ITM模块。

又是一个遗憾,本来以为找到了最合适的调试方法,却对MCU的内核有限制。那么有没有一种调试方同时具有SWO的优点,并同时能在Cortex系列内核的MCU中使用呢?

围观 1909

在上一次文档中,我们阐述了如何使用printf函数在串口终端上打印输出,这种调试方法能在一定程度上满足我们的调试要求。但是有的时候串口资源已经被占用或为了节约开发时间不使用串口,这时我们就需要一个不依赖于MCU外设的调试方法。今天就向大家介绍一个非常经典的调试工具-半主机(semihosting)。

半主机是在调试ARM设备时,主机电脑可以与设备进行输入输出通信的一个机构。这个机构可以直接调用C语言库中类似printf和scanf的函数。这个机构的好处在于允许用户使用主机电脑的输入输出设备,方便了工程师们的软件开发过程。Semihosting 是通过设置软件中断(SWI)来实现的。调用了适当的软件中断和易于操作的软件中断的向量。关于半主机的实现原理,感兴趣的读者可以自行查阅资料,本篇文章重点介绍如何将半主机模式应用到实际的软件开发过程中。

打开IAR工程,在主函数文件起始处包含stdio.h文件,如下所示。

#include

在主函数中,我们调用printf函数打印一些与芯片有关的信息,编译完成之后,对工程按照图 2所示配置。

点击OK,进入Debug模式之后,按照如图 3所示,打开Terminal I/O窗口。

当我们点击全速运行之后,我们可以在Terminal I/O窗口看到如图 4所示的信息。

可以看到,相关的芯片信息已经通过semihost打印出来了,并且也可以获得用户输入的字符哦。是不是很酷?

当我们高高兴兴地看着打印出来的信息时,发现字符输出的速度很慢,查阅资料才明白,在半主机模式下,输出字符的速度大概是10ms每个字符!

God!多么好的一个调试工具,但是字符输出的速度也太慢了吧。那么有没有一种调试方法和semihost一样不占用MCU外设资源,并且字符输出速度也很快呢?当然有,敬请大家关注《浅谈工程师的调试法宝(3)之SWO引脚的巧妙应用》。

文章来源:周立功单片机

围观 519

作为一名嵌入式软件系统工程师,掌握住高效快捷的调试方法,往往会在实际的项目开发中达到事半功倍的效果。今天就跟大家讲一讲我们在项目开发过程中,那些被我们忽视的调试法宝吧。

通过串口打印实时打印出MCU的运行状态,想必大家都有用过,可你是不是仍然停留在串口打印字符函数(比如说函数名是StringUartSend)都需要自己写的时代。纵然我承认你C语言功底很深厚,但是其实你已经OUT了。现在是讲究效率的时代,时间就是金钱,如果我们能够充分的利用C语言函数库,会让很多代码的编写变的很简单。

比如说,现在我们需要通过串口输出1个3位的10进制整数,变量名就叫A。按照之前的思路,先需要把A的个、十、百位等分别提取出来,然后转换成ASCII码存储到数组或指针里,最后通过StringUartSend函数把结果输出来。这时你也许会说,这就已经满足你的要求了,可是如果你要查看的数据是小数呢?转换起来是不是就浪费了很多运行空间。那么该怎么办呢?没事,printf函数可以轻松帮我们搞定。

Printf函数是一个格式化输出函数,《C程序设计高级教程》一书中有这样的描述:printf函数的作用是按照指定的格式将程序的数据输出到终端上,其一般形式为:

printf ( 格式控制,输出列表 );

其中格式控制和输出列表为printf函数的参数。更多关于该函数的详细描述,请读者自行查阅1.12.3 格式化输出一节。

这时我们可能就会想:如果能用它直接向PC上的串口软件打印信息的话,不是件很酷的事情么,再也不用自己写格式转换函数了。但它是C函数库中的函数,如何知道我们的底层调用了串口发送函数呢?这就用到了重定向技术。重定向的代码如程序清单 1所示。

程序清单 1 重定向代码

int fputc(int ch, FILE *f)
{
CharUartSend((char)ch); /* 串口发送一个字符函数 */
return 1; /* 发送完成返回1 */
}

在我们完成串口的初始化工作并编写好一个字符发送函数CharUartSend之后,就可以把程序清单 1所示的代码添加到你的工程里了。并在文件起始处添加stdio.h文件,如下所示。

#include

重定向的代码是由fputc函数来执行的。要注意的是,不能使用其他的名字,因为“fputc”是编译器预定义的用于字符输出的函数名。fputc()实际上只是一个封皮,它直接调用CharUartSend 函数来做真实的工作。

加入上面的代码之后,再重新编译一下你的代码,在主函数中随便写一个打印信息,是不是在串口助手上面有意外的惊喜呢?

通过上文的描述,你已经对使用printf在串口助手打印信息有所了解把,但是在调试过程中,还需要配置串口资源,无疑又加大了产品开发的周期。那么有没有一种方法,可以不使用MCU的外设资源,又可以查看调试信息呢?

文章来源:周立功单片机

围观 628

越来越多的人选择从事嵌入式开发工作,伴随而来的便是各种对硬件和寄存器的抓耳挠腮。你真的认为你现在的调试方式就是最合适的吗?先看看小粥为你带来的嵌入式调试实用秘籍!

使用集成开发环境开发基于ARM 的应用软件,包括编辑、编译、汇编、链接等工作全部在PC机上即可完成,调试工作则需要配合其他的模块或产品方可完成,目前常见的调试方法有以下几种:

1、指令集模拟器

优点:部分集成开发环境提供了指令集模拟器,可方便用户在 PC 机上完成一部分简单的调试工作。

缺点:由于指令集模拟器与真实的硬件环境相差很大,因此即使用户使用指令集模拟器调试通过的程序也有可能无法在真实的硬件环境下运行,用户最终必须在硬件平台上完成整个应用的开发。

2、驻留监控软件

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

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

3、JTAG 仿真器

优点:JTAG仿真器也称为JTAG调试器,是通过 ARM 芯片的JTAG边界扫描口进行调试的设备。 JTAG 仿真器比较便宜,连接比较方便,通过现 有的JTAG边界扫描口与ARM CPU 核通信,属于完全非插入式 ( 即不使用片上资源 ) 调试,它无需目标存储器,不占用目标系统的任何端 口,而这些是驻留监控软件所必需的。

缺点:由于 JTAG 调试的目标程序是在目标板上执行,仿真更接近于目标硬件,因此,许多接口问题 ,如高频操作限制、 AC 和 DC 参数不匹配,电线长度的限制等被最小化了。

使用集成开发环境配合 JTAG 仿真器进行开发是目前采用最多的一种调试方式。

4、在线仿真器

优点:在线仿真器使用仿真头完全取代目标板上的 CPU,可以完全仿真 ARM 芯片的行为,提供更加深入的调试功能。

缺点:这类仿真器为了能够全速仿真时钟速度高于100MHz的处理器,通常必须采用极其复杂的设计和工艺,因而其价格比较昂贵。

在线仿真器通常用在ARM的硬件开发中,在软件的开发中较少使用,其价格高昂也是在线仿真器难以普及的因素。

看了这么多种调试方法,哪种适合你呢?

文章来源:周立功单片机

围观 601

对于一个新设计的电路板,调试起来往往会遇到一些困难,特别是当板比较大、元件比较多时,往往无从下手。但如果掌握好一套合理的调试方法,调试起来将会事半功倍。对于刚拿回来的新PCB板,我们首先要大概观察一下,板上是否存在问题,例如是否有明显的裂痕,有无短路、开路等现象。如果有必要的话,可以检查一下电源跟地线之间的电阻是否足够大。

然后就是安装元件了。相互独立的模块,如果您没有把握保证它们工作正常时,最好不要全部都装上,而是一部分一部分的装上(对于比较小的电路,可以一次全部装上),这样容易确定故障范围,免得到时遇到问题时,无从下手。一般来说,可以把电源部分先装好,然后就上电检测电源输出电压是否正常。如果在上电时您没有太大的把握(即使有很大的把握,也建议您加上一个保险丝,以防万一),可考虑使用带限流功能的可调稳压电源。先预设好过流保护电流,然后将稳压电电源的电压值慢慢往上调,并监测输入电流、输入电压以及输出电压。如果往上调的过程中,没有出现过流保护等问题,且输出电压也达到了正常,则说明电源部分OK。反之,则要断开电源,寻找故障点,并重复上述步骤,直到电源正常为止。

接下来逐渐安装其它模块,每安装好一个模块,就上电测试一下,上电时也是按照上面的步骤,以避免因为设计错误或/和安装错误而导致过流而烧坏元件。

寻找故障的办法一般有下面几种:

①测量电压法。首先要确认的是各芯片电源引脚的电压是否正常,其次检查各种参考电压是否正常,另外还有各点的工作电压是否正常等。例如,一般的硅三极管导通时,BE结电压在0.7V左右,而CE结电压则在0.3V左右或者更小。如果一个三极管的BE结电压大于0.7V(特殊三极管除外,例如达林顿管等),可能就是BE结就开路。

②信号注入法。将信号源加至输入端,然后依次往后测量各点的波形,看是否正常,以找到故障点。有时我们也会用更简单的办法,例如用手握一个镊子,去碰触各级的输入端,看输出端是否有反应,这在音频、视频等放大电路中常使用(但要注意,热底板的电路或者电压高的电路,不能使用此法,否则可能会导致触电)。如果碰前一级没有反应,而碰后一级有反应,则说明问题出在前一级,应重点检查。

③当然,还有很多其它的寻找故障点的方法,例如看、听、闻、摸等。“看”就是看元件有无明显的机械损坏,例如破裂、烧黑、变形等;“听”就是听工作声音是否正常,例如一些不该响的东西在响,该响的地方不响或者声音不正常等;“闻”就是检查是否有异味,例如烧焦的味道、电容电解液的味道等,对于一个有经验的电子维修人员来说,对这些气味是很敏感的;“摸”就是用手去试探器件的温度是否正常,例如太热,或者太凉。一些功率器件,工作起来时会发热,如果摸上去是凉的,则基本上可以判断它没有工作起来。但如果不该热的地方热了或者该热的地方太热了,那也是不行的。一般的功率三极管、稳压芯片等,工作在70度以下是完全没问题的。70度大概是怎样的一个概念呢?如果你将手压上去,可以坚持三秒钟以上,就说明温度大概在70度以下(注意要先试探性的去摸,千万别把手烫伤了)。

好了,关于调试的问题,我们就暂时讲这么多。

来源:互联网 (版权归原著作者所有)

围观 405
订阅 RSS - 调试