《 嵌入式系统设计与实践》一一3.5 调试工具箱(和灭火器)

3.5 调试工具箱(和灭火器)
到目前为止,我们对数据表、用户手册、原理图的所讨论都停留在纸上(或电子文件上)。让我们在硬件上实践一下吧。等一等,在动手之前,请注意触摸硬件会让它遭受电击并将它损坏(特别是当你刚脱下羊毛外套的时候)。
3.5.1 保管好电路板
向硬件工程师要一些工具,用以保证电路板的安全。注意电路板应该放在哪儿。在需要移动时,始终将它放在存放电路板的那个袋子里。抗静电垫子很便宜,这也迫使人们不得不在办公桌上为硬件分配一个空间(即使不使用防静电手腕带,防静电垫子仍然是一个较好的改善,比电路板被倒下的书砸坏或从桌上猛丢到地上要好很多)。
如果可能的话,当需要往电路板上增加的电线时,需要将它们粘合并焊接好。返工一个损坏的电线要花费不止1小时的时间。同样道理,如果连接器没有特定的方向,使得它们只能以一种方式接入,那么给电路板拍个照片或者标记出正确的接入连接器的方式。
我喜欢将硬件连接到一个我可以关掉的电源插座(最好是计算机没有连接的插座)。有一份紧急情况下停止所有工作的计划,真的很不错。同时,注意灭火器在哪儿,以防万一。
严肃地说,问题通常不是由小火星造成的,而更多的是与烟雾有关。不管怎么说,一块损坏的电路板是不可能赢得朋友的。当经理或硬件工程师询问要为嵌入式软件开发分配多少电路板时,总要多要一两个以备用。名义上说,这样就可以确保对多个电路板做硬件测试。一旦系统开始有些初步成绩了,软件工程师最有可能失去对电路板的使用权,因为要用它展示给别人看。至少,这些都是我们应该给出的,想要一个备用板的原因,不是因为很可能损坏第一个(或两个)。
注意: 通常也会有些制造上的错误,特别是在密度比较高的电路板的设计早期。PCB裸板会用于连接性测试,但是所做的工作也仅限于此,特别是对于一个新设计来说,测试所有的焊点是否正确地连接、没有断裂或者短路。当某块电路板不能正常工作时,有第二块可以继续尝试再加上第三块将是非常有帮助的,当在两块电路板上得到的结果不同时,第三块电路板可以用做比较。
3.5.2 工具箱
我热爱我的工具箱,因为它赋予了我对硬件工程师一定程度上的独立性。我办公桌上的工具箱,可以让我用一种相对安全的方式对电路板做些小的改动(使用尖嘴钳移动跳线比用手指不太可能损坏电路板)。不算各种跳线丝、RS-232阴阳转换器,以及报废的电池,多年来我积累的工具还包括:
尖嘴钳
镊子(一对用作小钳子,一对用作镊子)
美工刀
数字万用表(后面会讲到这个)
电工胶带
三福记号笔
多种螺丝刀(或一个但有很多工具)
闪光灯
放大镜
安全眼镜
扎带(魔术贴和拉链带)
如果公司有良好的实验室且其他人都将他们的工具放置在有标记的区域内,那么可以使用他们的工具(但还是应该有你自己的工具)。如果没有,就去五金店跑一趟可能会让我们在未来工作中少一些挫折。
3.5.3 数字万用表
即使不打算有一个更完备的工具箱,我还是强烈建议软件开发人员拥有一块数字万用表(DMM)。购买一块便宜的、涵盖基本功能的万用表,花费只是一顿不错午餐的钱。当然,也可以花费整整一个星期的食物预算去购买一块非常不错的数字万用表,但显然不需要这么做。作为一个嵌入式软件工程师,通常我们只需要使用很少的一些功能。
首先,电压模式。在理想的情况下,数字万用表至少应该能够阅读从0~20V、精度0.1V 以及0~2V、精度0.01V。使用数字万用表的电压模式时,我们通常希望得到的答案是:是不是达到了特定的电压?虽然1mV精度的数字万用表有时候可能是不错的,但是80%的情况下使用万用表时遇到的问题会是“芯片或者器件是否已经加电了呢?”
其次最重要的模式是电阻检查模式,通常表示为欧姆(Ohm)符号和一系列三弧线。并不需要知道具体的电阻值。这种模式的真正用途是确定什么时候所有的东西都相互连接起来。正如电压模式可以回答:“这个器件有电了吗?”这个问题,这种模式将回答“这些组件是否正在互相通信?”
为了确定板上的两个点之间的电阻,数字万用表通过测试点发送一个小的电流。只要电路板是关闭的,这就是安全的。不要在加了电的电路板上运行电阻模式,除非确实需要这么做。
当数字万用表的蜂鸣器响起来时,表示有两个测试探针之间没有明显的电阻,表明它们已经相互连接(你可以通过将两个探针碰到一起以检查数字万用表的蜂鸣器)。使用这种模式,数字万用表可用于快速确定电缆或板上的走线是否已经坏了。
最后,数字万用表最好具有电流模式,这用安培符号(A或mA)表示。这个模式可以用来测量系统消耗了多少功率。在第10章会更多地讨论它。
3.5.4 示波器和逻辑分析仪
有时候,我们需要知道电路板上的电信号意味着什么。有三种方法可以帮助我们看到这些移动中的信号:
传统的示波器
测量模拟信号,通常一次是其中两个或四个。数字信号通过模拟来测量,但这个比较麻烦,因为每次只能看到两个点之一(高或低)。
逻辑分析仪
只能用于测量数字信号,通常同一时间可以测量很多信号(16、32或64)。逻辑分析仪曾经是庞然大物,需要花好几天去安装和配置。但通常会在安装完成数小时之类发现问题。现在很多可以连接到计算机,并做些辅助设置,这样安装过程只需一会儿。此外,许多逻辑分析仪带有协议分析仪,可以解释数字总线上的信号,所以可以很容易地看到处理器的输出是什么。因此,如果有一个SPI通信总线,并且往该总线上发送了一系列字节,那么协议分析仪将能够解释总线上的信息。网络分析仪是一种特定类型的协议分析仪,专门用于复杂的网络通信分析。
混合信号示波器
混合信号示波器结合了传统示波器和逻辑分析仪的特点,具有很多模拟通道和8个或16个数字通道。这是我个人最喜欢的,混合信号范围可同时分析不同类型的信息。
这些示波器往往是共享资源,因为它们比较昂贵。虽然,可以买到价格合理的设备连接到计算机,但有时它们的功能集仅限于非显而易见的方式。一般来说,物有所值。
设置示波器
第一步,是要确定哪些信号(S)可以帮助我们找出问题。第二步,需要将示波器的地线夹接地)。如果有多个地(AC地、DC地、模拟地)并且不能确定应该将仪器连接到哪个地时,就请教电子工程师。因为接地错误会损伤示波器。
第三步,将探针连接到感兴趣的信号。许多处理器有这样的小引脚,需要专门的探针。另一方面,许多硬件工程师在他们的电路板上放置测试点,知道软件团队为了调试,可能需要访问特定硬件信号。另外,可以将电线焊接在需要的信号线上并装上探针。
如果以前从来没有设置过示波器,那么使用起来就有点儿困难。示波器手册各有不同,但它们是最好的可以寻求帮助的地方(大部分是在线的)。没有对所有示波器通用的手册,所以在一页一页翻阅手册的时候,我只能告诉大家可以通过查找单词找到有用的信息。
图3-11显示了一个典型的示波器屏幕。最重要的点是,沿x轴移动的时间和沿y轴变化的电压。这些坐标轴的刻度是可配置的。
在示波器用户界面上的某个地方,应该有一个旋钮,可以调节时间刻度。把它往右旋转,可以看到每个水平刻度的显示,比如,从1~0.5秒(然后再往下到毫秒或微秒)。它控制了整个屏幕的时间刻度。对于调试来说,目的是从最大可能的时间基线开始,把你想看到的信息显示给你。
警告: 如果放大太多,会看到奇怪的事情,因为推测的数字信号将它们自己真实的(有些夸张的)颜色显示了出来。
在设置好了时间基线之后,还需要设置电压坐标轴的刻度。这可能是一个访问所有通道(或探针)的旋钮,使我们可以通过另一种方式切换通道,否则就可能每一个通道都有一个旋钮。无论哪种方式,把它往右旋转,这样每个垂直区块都被放大(5~2V,直到毫伏)。

图3-11:简化的示波器屏幕
如果不确定,那么将时间刻度设置为大约100ms/区块,将电压精度设置为大约2V/区块。如果需要,可以在此基础上放大(或缩小)。
另一个不同的旋钮将设置屏幕上每个通道的位置及零线。图3-11在屏幕左侧显示了每个通道的零线。可能是每个通道都有一个旋钮或者以重用的方式在所有通道之间共用一个旋钮。在每个通道之间保持一点点相互距离,以便可以看清每一个通道。(可能只用一个按钮就可以关闭不需要的通道。)
接下来,找到一个旋钮并设置时间刻度的零点。这将导致一个垂直线不固定地显示在屏幕上。将其设置到靠近中间的位置。或者,如果要查找某个事件发生后的信息,可以将它设置到屏幕的左边,如果想知道该事件之前发生的事情,就将它设置到屏幕的右边。
此时,可以打开系统,并看到一条摆动的线。它可能很快地移动,以至于根本看不明白它在做什么,但这只是一个开始。如果没有任何反应,找一找写着“运行/停止”(Run/Stop)的按钮。停止模式将显示停留在一个特定的时间点,使我们有机会思考所观察到的东西。靠近“运行/停止”按钮的可能是一个“单一”(Single)按钮,这个按钮等待一个触发,然后把系统置于“停止”(Stop)模式。还有一个“自动”(Auto)按钮,它将让系统持续不断地触发。
警告: 如果有“自动”按钮,那么在按下这个按钮之前要非常小心。请检查名称意味着自动触发还是自动设置。前者是有用的,但后者试图自动配置示波器。我发现它往往完全随机地重置示波器配置。
要设置一个触发,就得找到“触发”旋钮。这将会拉出一个水平线以显示触发电平。这是依赖于通道的,但不像其他依赖通道的旋钮,它通常不能为每个通道设置触发。事实上,它需要额外的配置,通常是通过屏幕上的菜单和按钮。我们期望将触发设置在感兴趣的事件开始(或结束)时发生变化的通道上。我们需要选择触发被激活后是上升还是下降,还需要设置触发的频率。如果想看到第一次变化,那么设置一个很长的超时时间。如果想看到最后一次的变化,则设置短暂的超时时间。
有些其他的事情需要注意。除非确实需要这么做,否则不要将示波器置于交流(AC)模式。存在一种可能性,探针提供的信号是屏幕上大小的10倍(或1/10)。这取决于探针,因此, 如果此时放大幅度处于关闭状态,那么找到10椎谋昙牵⑶仪谢坏秸飧鲎刺?
如果按照我的指导(以及示波器手册)对示波器进行设置,但是它却没有按照所期望的去工作,那么就需要向丰富经验的人寻求帮助。示波器是一种强大并且有用的工具,但需要经过许多实践才能真正达到最佳效果。在开始时遇到一些挫折,不要气馁。

时间: 2024-10-10 21:26:49

《 嵌入式系统设计与实践》一一3.5 调试工具箱(和灭火器)的相关文章

《 嵌入式系统设计与实践》一一导读

前言 我热爱嵌入式系统.当我第一次让马达转动时,我着迷了.我很快从单纯软件开发进入到我可以触摸真实物体的一个领域.在我离开软件开发的时候,设计模式注1开创性的工作已经完成.我和我的团队通读了这本书,讨论这些模式以及可以在哪儿应用这些模式.随着我进一步深入研究嵌入式系统,我发现不能处理C++继承的编译器,在处理器极其有限的内存中去实现模式,以及一系列新的问题使设计模式看起来难以应用.但是我从来没有忘记在工程化方法中存在着模式.通过学习识别模式,我们可以反复地使用这些健壮的解决方案.本书大部分内容着

《 嵌入式系统设计与实践》一一第3章 检视硬件

**第3章 检视硬件**嵌入式系统的设计可能是一件艰巨的任务.大多数软件工程师需要电气工程方面的速成课程,同时大多数电气工程师需要好的软件设计方面的速成课程.与来自不同学科的成员密切配合,可以让嵌入式系统的开发工作容易很多.比如,我有些非常好的朋友就是电气工程师.如果没有从头到尾地经历过一个包括硬件的产品开发周期,那么讨论关于其中的角色和职责可能就有点儿难.但是,我会从一个项目一般的流程开始,然后给出一些关于所需技能的具体建议,以帮助大家在团队中承担起重任,这些技能包括:阅读数据表(datash

《 嵌入式系统设计与实践》一一2.2 从框图到架构

2.2 从框图到架构 至此,我们已经有了三种不同的架构设计图,那么下一步怎么做呢?也许会认为开始的时候有些代码没有考虑到,又或者我们会进一步去找出这些模块之间是如何交互的.在开始讨论这些交互(接口)之前,花一些时间讨论一件事情是值得的,那就是:哪些部分将发生变化?在目前这个阶段,所有的事情都是实验性的,因此系统的任何一个部分都可能发生变化. 给出了产品需求规格后,我们可能对系统要实现什么功能比较有信心.在我们的例子里,不管最终要做什么,都需要一个显示器,将位图数据发送给它最好的方式就是闪存.很多

《 嵌入式系统设计与实践》一一1.2 嵌入式系统开发

1.2 嵌入式系统开发嵌入式系统是特殊的,因此也给开发者带来一些特殊的挑战.许多嵌入式软件工程师开发了工具箱来处理各种约束.在我们开始构建自己的系统之前,先来看看开发一个嵌入式系统会有哪些困难.在熟悉了嵌入式系统开发会如何受到限制之后,我们再开始讨论一些设计原则并借此指导我们找到更好的解决方案.1.2.1 调试如果在计算机上运行调试软件,就可以在这台计算机上编译和调试.系统有足够的资源在运行程序的同时调试程序.事实上,硬件根本不知道是在调试程序,因为这是由软件完成的.嵌入式系统就不是这样了.除了

《 嵌入式系统设计与实践》一一2.3 一个可以实践的沙盒

2.3 一个可以实践的沙盒前面部分很好地覆盖了底层和中间层的模块,但还有一些算法模块需要考虑.好的架构设计的目标之一就是尽可能地让算法保持独立.常用的模型-视图-控制器(MVC)模式就是解决这个问题很好的方法.这个模式的目的是将应用程序的业务逻辑从用户界面中分离出来,这样可以独立地对它们进行开发和测试.在这个模式中,视图是提供给用户的界面,包括了输入和输出.在我们的设备中,用户可能不是一个人,它可以是一个硬件传感器(输入)和一个屏幕(输出).事实上,如果系统没有屏幕,但是它通过网络传送数据,这时

《 嵌入式系统设计与实践》一一3.6 测试硬件(和软件)

3.6 测试硬件(和软件) 虽然我强烈建议准备好工具箱.数字万用表和示波器,但是,如果大家没有准备好独自拥有这些,那么将这些留给硬件工程师也在情理之中.作为一个软件工程师,更重要的是将用于测试硬件的软件尽可能构建得有利于方便调试. 嵌入式系统有3种常见的测试.第一种,在每次系统引导的时候都运行加电自检(POST),即使代码被释放.这个测试验证所有的硬件组件都已经就绪,可以安全地运行系统.加电自检(POST)测试得越多,开机时间就越长,因此需要权衡可能对客户造成的影响.自检完成后,客户就可以使用系

《 嵌入式系统设计与实践》一一3.4 阅读原理图

3.4 阅读原理图 如果你是传统软件世界的开发人员,那么原理图看起来就像是一个充斥着象形文字的视力表,散布着奇怪的方框和复杂的连线.就像数据表一样,知道从哪里着手往往是件令人望而生畏的事情.对于多页的原理图,从第一页开始可能是有风险的,因为很多电气工程师把他们的电源处理硬件放在第一页,而这部分对于软件工程师来说,不是一定要去关注的.图3-9展示了一个原理图的一页片段. 有些原理图中会带有文本块(通常位于图的角落),这些文本是注释,需要仔细阅读,特别是当文本块的标题是"处理器I/O"或者

《 嵌入式系统设计与实践》一一3.7 处理错误

3.7 处理错误 代码的生命周期让我震惊.因为有时侯好像我们总在以不同的方式重写同样的旧代码,有一天我们可能会发现自己在10年前入门阶段写的一段代码正在被一个财富500强公司使用.既然代码工作的如此之好,为什么还要修复其中那些隐藏很深的问题呢? 在某些时候,代码将失效.这一点可能让人会感到可怕.一个错误的发生,要么是由于代码本身,要么是由于环境中一个意想不到的情况.有两种方法来处理错误.首先,该系统可以进入优雅降级的状态,在这个状态中软件会尽可能做到最好.或者,系统可能会优雅地立即失效.长期运行

《 嵌入式系统设计与实践》一一2.4 延伸阅读

2.4 延伸阅读 本章中讨论了众多设计模式中的一些模式.本书其他部分也会讨论一些设计模式,但是本书是关于嵌入式系统的,而不是关于设计模式的.试着从以下这些资源中选择一个进行进一步研究,以便更多地了解标准的软件设计模式. Gamma, Erich, Richard Helm, Ralph Johnson和 John Vlissides. 1995. 设计模式: 可复用面向对象软件的基础.Boston: Addison-Wesley. 这是最早的关于设计模式的著作.这本书采用了C++作为参考语言.