使嵌入式系统调试更容易:有用的硬件和软件提示

使嵌入式系统调试更容易:有用的硬件和软件提示

Making embedded system debug easier: useful hardware & software tips

嵌入式系统是硬件和软件的混合体。两者必须相辅相成。硬件人员可以使软件更容易实现。因此,这里有一些建议,使系统的硬件、软件和固件更容易调试。记住一个好的设计是可行的;一个好的设计也是一个易于调试的设计。

First up: diagnostics

第一步:诊断             

在非嵌入的情况下,最受欢迎的调试技巧是将print语句种子植入代码中。它们告诉程序员执行流是否到达打印点。但是软件人很少有这个选择。             

所以,添加一些未分配的并行I/O位。软件开发人员迫切需要这些作为一种廉价的方法来检测他们的代码。将I/O指令植入驱动这些输出的代码中是查看程序正在执行的操作的简单而快速的方法。             

开发人员可以在进入例程或ISR时断言一点,然后在退出时降低它。然后范围或逻辑分析器会立即显示代码段的执行时间。              

另一个技巧是在系统繁忙时循环输出位高,空闲时循环低输出位。把电压表连接到引脚上,这是一种老式的带有模拟指针的装置。仪表将集成二进制脉冲流,因此显示的电压将与系统负载成比例。             

如果空间和成本允许,包括一个连接到一行0.1英寸间隔的过孔或头的8位寄存器。软件状态机可以将其当前的“状态”输出到此端口。逻辑分析器捕获数据并显示所有的排序,对代码的执行时间几乎没有影响。             

至少需要一个LED来向开发者,甚至是客户发出信号,让他们知道这个系统是正常工作的。它是一个由低优先级任务或空闲循环驱动的信心指示器,它表明系统是活动的,并且没有卡在某个有限的循环中。很多嵌入式系统都可以有简单的LED指示灯。             

高度集成的CPU现在提供了很多片上外围设备,有时比我们在特定系统中需要的还要多。如果有一个额外的通用异步收发器,把引脚连接到一个RS-232电平转换芯片(例如,MAX232A或类似芯片)。除了原型制作外,没有必要实际将芯片加载到电路板上。             

软件开发人员可能会发现自己处于一个角落,在那里他们的工具是不够的,然后会想在代码中添加一个软件监视器。RS-232端口使这成为可能和容易。             

如果PCB不动产是如此的有限,以至于没有空间来进行电平转换,那么至少要将Tx、Rx和接地连接到可访问的过孔上,这样就可以在电路板上方的绿色导线上挂起一个MAX232。             

(开发人员请注意:如果您确实使用此端口,请不要在实现监视器时过于惊慌,以致于使用轮询I/O实现RS-232驱动程序。请花点时间创建合适的中断驱动代码。根据我们的经验,监视器上的轮询I/O会导致遗漏字符、不可靠的工具和巨大的挫败感。)             

把复位线接到开关或跳线上,这样工程师就可以独立于正常通电复位来判断信号。通电问题有时可以通过将reset连接到脉冲发生器来隔离,从而创建一个易于用示波器研究的可重复场景。

Connecting Tools

连接工具             

调整CPU芯片的方向,以便在使用模拟器时可以连接模拟器。有时,目标板被埋在机柜内,访问最多也受到限制。大多数仿真器pod都有利于特定插入方向的形状因子。             

也要注意垂直间隙!堆叠在大型SMT适配器上的吊舱可能需要离主板4到6英寸的空间。确保没有任何东西会干扰吊舱。             

不要在SMT封装上使用“卡夹式”适配器。它们根本不可靠(唯一的例外是PLCC包,它们有很大的潜在客户)。在巴西,一只黄油飘扬着翅膀,产生了足够的空气流动,足以把它掀翻。更好的是,卸下CPU,安装一个焊接的适配器。PCB将永远是一个原型,但至少它将是一个可靠的原型。             

在系统的时间安排上留有余量。如果每纳秒都被计算在内,没有一个模拟器能可靠地工作。在读写周期中,尤其是在等待状态电路中,额外的5nsec不会影响大多数设计。             

如果处理器有BDM或JTAG调试端口,请确保在PCB上添加适当的连接器。即使你打算使用一个成熟的仿真器或其他开发工具,至少要为BDM连接器添加PCB焊盘和布线。连接器的成本接近于零,并且可以节省一个饱受工具问题困扰的项目。             

逻辑分析器是一个非常棒的调试工具,但它总是让人大失所望。当你完成连接100个夹子引线时,前50个已经弹出。             

有一个更好的解决方案:用放大器的Mictor连接器环绕你的CPU。这些是高密度、可控阻抗的部件,可以将系统的地址、数据和控制总线传输到车外。泰克和安捷伦都支持Mictor。这两家公司都出售从逻辑分析仪直接引至微型计算机的电缆。没有夹子引线,无需定制电缆,保证在几秒钟内可靠连接。从生产版本的电路板上取下连接器,或者只留下PCB板而不加载部件。             

当我们连接工具时,有些信号特别容易失真。地址锁存启用(ALE),也被称为地址选通(as)在摩托罗拉零件,区分地址和数据多路复用总线。模拟器或探测器对该信号产生的微小噪声都会导致系统崩溃。             

对于任何边缘触发的中断输入(如许多CPU上的NMI),也是如此。用双电阻网络终止这些信号。虽然你的设计可能是完美的没有终端,连接工具和探测信号可能会破坏信号。             

添加测试点!除非它的接地连接很短,否则示波器无法准确显示我们现代设计中特有的高速信号。在过去的好日子里,在逻辑器件的引脚上焊接一点导线,就可以很容易地建立一个即时的接地连接。对于SMT,这要么是困难的,要么是不可能的,所以在电路板周围分布大量可接近的接地点。             

其他的信号我们将探测很多,必须是可访问的,包括时钟,读,写,和所有的中断输入。确保每个测试点都有测试点或足够大的通孔,显影剂可以将电线(通常是电阻引线)焊接到信号上。             

添加Vcc测试点。逻辑探测器虽然很旧,但仍然是非常有用的工具。大多数人需要电源连接。

Thoughts about ports

关于港口的思考             

使所有输出端口可读。对于asic中的控制寄存器来说尤其如此,因为无法探测这些寄存器。             

注意位顺序。例如,如果从A/D读取数据,那么将位7转换成0位、6位到1位等等的糟糕设计是一场噩梦。当然,软件人员可以编写代码来修复混音,但大多数处理器并不擅长这一点。代码将是缓慢和丑陋的。             

使用许多窄的I/O端口,而不是几个宽的I/O端口。当一个端口控制三个LED、两个中断屏蔽和一个步进电机时,改变任何输出意味着管理每个输出。代码变成了一堆错综复杂的ANDs/or。任何小的硬件更改都需要大量的软件调整。当使用离散逻辑实现时,宽端口确实可以最小化部件数量,但是在PLD或FPGA中没有成本优势。             

避免将未使用的数字输入直接连接到Vcc。在过去的日子里,这种做法是禁止的,因为74LS输入比Vcc引脚更容易受到瞬态的影响。所有未使用的输入通过电阻上拉连接到Vcc。逻辑设备不再需要这样做,但它仍然是一个很好的实践。探测和更改一个没有硬连接到电源的节点要容易得多。             

但是,如果您必须将电源直接连接到这些未使用的输入端,请非常小心PCB布局。不要通过引脚供电;也就是说,不要将引脚作为一种方便的方式将电源提供给其他引脚或电路板的另一侧。             

最好小心地运行所有的电源和接地连接,作为PCB外部层上的轨迹输入信号,这样当IC焊接到位时,它们就会清晰可见。然后开发人员就可以轻松地用X-Acto刀切割轨迹并进行更改。             

拉高电阻带来了他们自己的挑战。许多调试工具都有自己的上拉程序,这可能会使节点产生奇怪的偏差。最好使用较低的值,而不是CMOS允许的高值(比如10k而不是100k)。             

PCB丝网是经常被忽视的调试辅助工具。标记开关和跳线。始终表示引脚1,因为在SMT领域没有标准的引脚1位置。并在大尺寸SMT封装周围每隔5或10个管脚添加勾号,并指示管脚数量是顺时针还是逆时针方向增加。否则,找到针139是一场噩梦,尤其是对于患有咖啡因诱发震颤的双焦佩戴开发人员。             

关键的连接器,这样就不需要猜测电缆的走向。             

请在示意图中添加注释!指示页面上的所有路线。不要隐藏与电源和接地相关的管脚编号,请明确标记这些。             

当设计完成后,检查每个设备的每一个输入,并绝对确保每个输入都连接到某个东西上,即使它没有被使用。我见过数百个系统在现场失败,因为一个未使用的输入漂移到断言状态。您可能希望软件人员在代码中屏蔽这些信息,但这并不总是可能的,即使是这样,也常常被遗忘。             

尽量避免使用硬件状态机。它们很难调试,而且常常与软件非常接近,这也使得调试变得不友好。更容易在代码中完全实现这些功能。工具(例如,来自IAR的VisualState)可以自动生成状态机代码。

施工方法             

嵌入式控制器可以使用多种技术中的任何一种来构建,但最常见的方法是印刷电路板(PCB)。印刷电路板是由绝缘材料制成的,例如环氧树脂浸渍的玻璃布,用薄铜片层压而成。             

多层铜和绝缘材料可以层压成多层PCB。通过在材料上钻孔和电镀孔,可以将层互连并为通孔组件提供安装位置。             

在设计PCB的布局或互连模式时,有许多冲突的要求必须加以解决,才能制造出一个可靠、经济、可生产的设备。对于低速电路,寄生效应可以忽略,通常假设为理想连接。             

不幸的是,实际电路并不理想,电线和绝缘材料对电路有影响,特别是对于信号上升/下降时间很快的信号。印刷电路板上的线路或导线有杂散电阻、电容和电感。             

在高速下,这些杂散效应会延迟和扭曲信号。在设计PC板时必须特别小心,以避免传输线效应、噪声和不必要的电磁辐射问题。             

电源和地面飞机。在可能的情况下,最好使用两层四层或多层PCB,专门用于Vcc和接地信号。它们被称为电源和地面。一个优点是有一个有益的高频寄生电源去耦电容,它降低了集成电路的电源噪声。             

功率平面还可以减少产生干扰的电磁辐射,降低电路对外界感应噪声的敏感度。功率平面往往起到屏蔽作用,以降低对外部噪声和系统噪声辐射的敏感性。             

地面问题。虽然理想电路接地的概念似乎相对简单,但在实际应用中,许多系统问题都可以直接追溯到接地问题。             

至少,这会导致不必要的噪音或错误的操作;最坏的情况是,它可能会导致安全问题,甚至可能因触电死亡。为了避免你过快忽视这种可能性的重要性,作者在测试一个接地不当的设备时差点触电身亡!             

这些问题通常由以下问题之一引起:             

1) 接地电路中的电感或电阻过大,导致“接地回路”             

2) 系统中不同接地之间缺乏或不充分的隔离:接地、安全、数字和模拟接地              

3) 非理想接地路径,导致一个电路中的电流在另一个电路中产生电压             

这些问题的解决方案各不相同,这取决于问题的类型和它们发生的频率范围。             

通常,它们可以简化为减少电路公共阻抗中的电流,这些电路需要使用单点接地和谨慎应用屏蔽和绝缘来防止不必要的寄生信号耦合。

EMC and ESD effects

电磁兼容性和静电放电效应             

电磁兼容性(EMC)问题变得越来越重要,因为现在有大量的电子设备无意中在相同的频率范围内辐射电磁能量,用于通信、导航和仪表。             

监管机构,如美国联邦通信委员会(FCC)、加拿大通信部(DOC)以及欧洲的类似组织,都对此类电子设备在不同频率下的发射能量进行了限制。             

由于应用的敏感性,对生命关键设备,如飞机导航和生命支持设备提出了更严格的要求。除其他外,这些设备需要提供对外部感应噪声(辐射和传导敏感度)的最低抗扰度。             

在解决EMC问题时,第一步是确定噪声源、到达问题区域的路径以及问题出现的目的地。一旦确定了电磁兼容问题的这三个特征,工程师就可以评估在其源头消除噪声、使用屏蔽和类似技术切断路径以及降低受影响电路的灵敏度的相对优势。             

有几种有用的资源,包括出版物、研讨会、测试实验室和专门解决EMC问题的顾问。最好的解决方案通常是在原型阶段尽早开始测试一个新的设计,以确定潜在的问题区域,以便以最小的成本和进度影响来解决这些问题。             

静电放电(ESD)在嵌入式应用中是一个重要的设计考虑因素,因为在存在外部电场的情况下可能会发生故障和错误操作。             

当有人在低湿度环境中走过地板时,在接触电子设备之前,ESD电压通常会在嵌入式接口上以数万伏的电压施加。             

最常见的问题之一是键盘或用户输入设备,它们与外界直接接触。这种影响可能会立即造成损坏或不安,或可能导致潜在故障,这些故障会在ESD事件发生数月后出现。             

设计者通常使用与安全和减排技术类似的屏蔽和接地技术,以尽量减少静电放电的影响。可用于解决EMC问题的资源通常也可用于ESD问题。

Fault Tolerance

容错             

在嵌入式系统中,容错已经越来越成为一种需求,因为它们在失败是不可接受的应用中找到了出路。许多硬件和软件解决方案已经开发出来以满足这一需求。             

为了理解如何处理这些故障,我们必须首先识别和理解每种故障的类型和性质。每个断层都可以分为“硬”或“软”断层。硬故障会导致无法消除的错误,例如,按下复位或断电不会导致从故障状态中恢复。软故障是由瞬态事件或某些情况下的程序错误引起的。             

如果故障不太严重,自检和诊断程序可以识别和诊断故障。             

根据发生的故障类型和受影响的设备,可以设计一个系统来检测故障,甚至可以在某种程度上隔离故障位置。在软故障的情况下,设计者可以使系统从故障中自动恢复。             

可以为嵌入式处理器编写一个内置自检程序,该处理器能够检测以下类型设备中的故障:             

•处理器(如果故障不太严重)             

•记忆             

•只读存储器             

•随机存取存储器             

E/EEPROM             

•外围设备             

请注意,如果不是不可能的话,很难检测到控制电路中的故障或系统中的“粘合逻辑”。其他设备,如存储器,则有助于诊断方法。             

可使用以下一种或多种技术对ROM设备的数据内容进行错误测试:             

•平价             

•校验和             

•循环冗余校验(CRC)             

RAM存储器和处理器存储在RAM中的信息的完整性可以使用以下技术之一进行测试:             

•硬件错误检测和纠正             

•数据/地址模式测试             

•通过检查堆栈限制和地址范围有效性实现数据结构完整性             

此外,可以使用以下一种或多种技术来检查程序的完整性和CPU的正确执行顺序:             

•硬件奇偶校验错误检测             

•重复、冗余硬件和交叉检查或投票             

•“看门狗”定时器,操作CPU芯片的复位线             

•当CPU没有其他事情可做时,持续运行的诊断

Instrumentation Issues

仪表问题              

设计师必须解决的一个最重要但往往被忽视的问题是测试仪器的正确选择和使用。这些工具的不当选择和应用常常是设计师浪费大量时间和混乱的根源。示波器和逻辑分析仪探头的使用有两个常见的使用问题。             

一个典型的示波器或逻辑分析仪配备的探头可能不会对观测到的信号产生影响或使收集到的数据失真。由于输入阻抗在兆欧范围内,且寄生电容为数十皮卡法拉,测试设备似乎对测量结果几乎没有影响,但事实并非如此。             

测量问题有两个常见的原因:过大的地线电感和过大的电容负载。这些东西至少会导致错误测量的可能性,或者最坏的情况是,它们会导致被测电路表现出不同的行为。要缓解这些问题,可以做两件事:             

1) 使用尽可能短的测试引线,尤其是快速逻辑上的接地连接。             

2) 使用高阻抗探头,特别是为高速应用而设计的,如高速FET输入范围探

头。             

其他仪器问题可能是由于对数字示波器中采样效果的误解,逻辑分析仪缺乏故障检测,以及其他一些晦涩但可能痛苦的“学习经验”。只有充分了解所使用设备的操作和一些实际经验,才能避免这些问题。              

其他特殊设计注意事项             

嵌入式系统设计者至少应该对其他一些特性有所了解。这些包括系统的热特性和热阻、功耗的概念,以及对设备温度和可靠性的影响。在便携式、手持和远程定位系统中,另一个重要问题是电池储能的应用。             

热分析和设计。半导体器件的温度,如电压调节器,甚至CPU芯片,是一个关键的系统运行参数。这些器件的可靠性也与温度密切相关,这是因为器件的可靠性随着温度的升高而呈指数级下降。             

幸运的是,计算一个设备的工作温度并不困难,因为有一个简单的电路类比最常用来计算设备的温度。温度类似于电压,消耗的功率等于电流,热阻等于电阻。换句话说:

Temperature rise (ºC) = power (watts) * thermal resistance (ºC/watt)

一个接一个叠放的多个机械部件的热阻相加,就像串联电阻等于单个电阻值的总和一样。             

例如:给定一个5V线性电压调节器,9V输入提供1安培的负载电流,调节器将消散:   

P = V * I = (9 – 5 volts) * 1 amp, or 4 watts, of power

如果调节器在半导体结和外壳之间的热阻为1ºC/W(表示为Θjc),并且安装调节器的散热器从调节器安装表面到静止环境空气的热阻为10ºC/W(表示为Θca),则半导体结与环境空气之间的总热阻为:

Θja =Θjc + Θca = 1 + 10 = 11ºC/watt

连接处的温升高于调节器周围空气的温升如下:

T = P * Θja = 4 watts * 11ºC/watt = 44ºC above ambient

如果调节器被指定在最高结温85℃下运行,则该装置不应在高于85–44=41℃的环境空气中运行,否则调节器将过早失效。             

如果这是不可接受的,设计者必须降低输入电压以降低功耗,通过强制气流降低热阻,或将设计更改为另一种类型(例如开关式调节器),以使调节器接头保持在操作限制范围内。

Performance Metrics: IPS, OPS and benchmarks

性能指标:IP、OPS和基准             

为了比较不同类型的计算机,制造商们提出了一系列量化处理器性能的指标。             

这些设备在嵌入式系统中的成功应用通常取决于以下特点:             

IPS(每秒指令数)             

•操作(每秒操作次数)             

•扑通(浮点操作)              

•基准测试(标准化和专有的“样本程序”),是小型应用程序中处理器性能的短样本             

IP,或者更常见的形式,MIPS(百万IP)和BIPS(数十亿IP),通常被到处乱扔,但本质上是毫无价值的营销炒作,因为它们只描述机器上最快指令的执行速度。通常该指令是NOP指令,所以500 MIPS可能意味着处理器每秒无法执行5亿次操作!             

针对IPS度量的弱点,OPS(以及MOPS和bop,听起来至少很有趣)是基于不同指令组合的指令执行时间。其目的是使用标准的执行频率加权指令组合,更准确地表示“标称”指令执行时间。             

flop(megaFLOPS,giga FLOPS等)是相似的,除了它们对浮点指令的权重很大,以表示大量的计算应用,如连续模拟和有限元分析。             

OPS度量的问题在于,结果数在很大程度上取决于用于计算它的指令组合,这可能无法准确表示预期的应用程序指令执行频率。             

基准。基准测试是一种简短的、独立的程序,它执行应用程序的关键部分,例如排序算法,用于比较不同机器上功能相同的代码。             

程序运行若干次迭代,并测量时间并与其他CPU的时间进行比较。这里的弱点是基准测试不仅是对处理器的度量,而且也是对程序员和用于实现程序的工具的度量。             

因此,最好的基准测试是你自己编写的,因为它可以让你发现你编写的代码在给定的处理器上有多有效地执行。这与您可能获得的实际应用程序性能非常接近,只是没有在评估的每个处理器上完全实现应用程序。

你可能感兴趣的:(使嵌入式系统调试更容易:有用的硬件和软件提示)