datasheet

嵌入式系统的调试方法

2018-02-14来源: eefocus 关键字:嵌入式系统  调试方法

    文章介绍了嵌入式系统开发过程实际上就是一个调试诊断的过程,而且调试诊断将一直伴随着一个产品的终身,即使是最成熟的产品也偶尔会出现这样或那样的问题,这都需要开发人员去诊断、排查。

    嵌入式系统的调试包括硬件调试、软件调试以及综合调试。硬件调试一般是指系统刚开发出来时上电前后的检查,包括:

    1)上电前检查电源和地是否短路,目视检查是否有虚焊、漏焊;

    2)上电后检查时钟线上的频率和波形、幅度是否正常,各电源电压是否稳定正常,各芯片温度是否正常,各指示灯是否正常。

    软件调试一般是指保证硬件一切正常的情况下验证程序执行的时序是否正确,逻辑和结果是否与设计要求相符,能否满足功能和性能要求等。软件调试的方法有很多,包括:

    1)用指示灯跟踪调试;

    2)用串口打印调试;

    3)用简单的调试器进行汇编代码级调试;

    4)用比较高端的调试器进行源代码级调试;

    5)用仿真器进行硬件仿真。

    上述单纯的硬件调试或软件调试都是相对比较简单的,困难的是综合调试。下面我先举一些自己在工作中曾经碰到的疑难问题,然后再从中归纳出一些一般的调试方法和注意事项。

    例 1:我们自主设计制作的PPC860(Motorola)网络引擎平台的调试已接近尾声,同一批生产的4块板子都通过了全部软件测试,于是又去焊了第二批,可是在第二批板子中有1块板子的FEC不能正常工作,我们几个软件和硬件工程师使用了各种手段,重新看了多遍芯片手册,还是没找出原因,于是把板子发回工厂重新焊接BGA,可是回来问题还是照样存在,没办法最后打算将这块板子当作个样处理,把板子上的芯片都焊下来。按常理来说这种做法很符合逻辑,因为元器件都是一样的,板子也是一批的,那就可能是这块板子的某个地方焊接不好,但又不好查,反复重新焊接可能会把主板焊坏。后来有人从PPC860芯片上用放大镜都要睁大眼睛才能看清的字符上(据说我国第一代国产高端处理器芯片“寒心”就是某“科学家”将“摩托”同一类型芯片上的这些字母磨掉后刻上“寒心一号”摇身一变造出来的!!!)发现这块板子的CPU版本号是“D4”,而其他板子的CPU版本号是“D3”,可芯片手册上并没有这两个版本之间的比较说明,从网上找到PPC860的勘误手册,发现在PPC860TZP50D4版本中,ECNTRL寄存器增加了一个叫FEC_PIN_MUX的位(bit2)来控制FEC各管脚的复用功能,如果要使用FEC就必须将该位设置为1,所以要在FEC的相关程序中加上ECNTRL |= 0x00000004语句行。

    例2:当我调试业余自制的MC68VZ328板子时,电路板硬件检查没有问题,用Code warrior通过串口往flash中烧制编译好的uClinux程序也一切正常,但是重新上电,发现串口没有任何数据,用万用表检查(当时自己没有示波器等“先进设备”)也没查出结果,然后每天上下班把这块板子放在包里,没事就拿出来瞪大眼睛看看,看着也不免窝火,但有一天却发现一个标着电阻符号的地方却焊上了电容,回到家把电阻换上去再上电,串口一下就打印出uClinux的启动信息,呵,那滋味,比喝了蜂蜜都甜,当然当时也是因为没有太多经验,如果这问题放现在,估计一天内肯定解决掉。另外在初次调试自制的S3C4510开发板时,就是不能从串口输出字符,费了半天时间才发现把串口电平转换芯片 max3232cse的第6脚上的旦电容极性焊反了。

    例3:在调试SB1250嵌入式服务器主板时,由于使用的是DDR1代内存条,数据线和时钟线上串并联的去耦电容电阻相当多,第一批焊回来的板子几乎没有一块能够顺利进入CFE(BIOS)菜单界面的,检查时钟波形和电源与借用的 DEMO板相比都很好,我把主板上DDR DIM槽周围的那些去耦电阻电容都全部用烙铁重新过一遍锡,嘿嘿,还真管用,这种方法屡试不爽,而且在后面调试PCI和HT总线时使用这招也很有用,可能是因为SB1250系统是高频电路,对焊接要求比较高,稍微有一点漏焊或者虚焊都不行,我是这样认为的。

    从上述几个例子中我们可以总结归纳以下几点调试方法和注意事项:

    1)加深理解法:加深理解包括加深对硬件和软件的理解,加深对硬件的理解主要是详细阅读相关的芯片数据手册,而加深对软件的理解是因为现在开发嵌入式系统并不是所有程序都需要自己编写,很多都是已经做好的,直接从网上获取或者采购获得,但这些软件不一定是完全针对我们自己的目标板的,所以在使用过程中经常会发现一些问题,特别是底层软件,而一旦出现问题,开发人员首先必须了解出现问题的代码。只有建立在对相关硬件和软件深入理解的基础上才可能做出更符合实际的判断,才可能更好地解决问题。

    2)比较法:比较的方法有很多,比如将同样的软件放在两个类似但不相同的硬件平台上运行比较现象;将两个不同版本的软件放在同一个硬件平台上运行比较现象;将相同的软件放到相同批次但不同的两个硬件平台上运行比较现象。对于一些不是很隐蔽的问题通过比较法通常能得到不错的效果。

    3)分解法:当碰到分析起来比较复杂、可能有很多因素的问题时,可以把问题分成解几个小问题来测试诊断,比如编写几个单独的小测试程序对各种可能因素进行排查测试,根据这些测试结果再进行科学判断。

    4)软硬件结合法:这种方法是需要一定灵感和悟性的。比如上面的例5,在测试过程中,可以在不破坏硬件的前提下临时改变一下硬件的状态(比如该例中将数据线和时钟线短路),看问题现象会不会有所变化,如果有,那么多做类似试验找出变化规律和关键因素,然后再进行分析解决。在底层软件开发中,对于时序要求严格的硬件模块的软件编程要特别注意,一旦程序的时序出了问题,而这部分软件已经与其他系统软件融合到一起,那么这种软件让别人去检查是很难查出问题的。

    5)诊断、排故要建立在大量实验的基础之上,要多动手,不能光知道臆想,不愿实际操作,还美其名曰“善于思考和分析”。嵌入式系统开发是一门实践性很强的科学,需要在实践中总结出事物客观规律,从而更好地认识和利用它们,让它们更好地按我们的意图工作。

    6)嵌入式系统开发调试要求开发人员有严谨细致的工作态度,决不放过调试过程中发现的任何一点蛛丝马迹,因为它很可能就是打开潘多拉宝盒的钥匙。

    7)要有实事求是的工作作风,要有敢于怀疑一切的精神和勇气,我们理当尊重权威和前人的科技成果,但当出现矛盾时我们更应该相信实验结果,这样科学才会进步。

    8)要勇于挑战自我,抛开习惯性思维和成见,拓宽思路,多角度分析问题。

    9)嵌入式系统开发特别是底层软件和操作系统内核开发因为需要同时跟软件和硬件打交道,所以是一件比较艰苦的工作,很有挑战性。即使我们各方面都做得非常好,考虑得非常细致周全,目标系统仍然可能跟我们开一些小小的玩笑,我们经常会碰到一个非常小的问题困扰我们几天甚至几周的时间,这期间我们可能茶饭不思、夜不能寐,因此嵌入式系统底层软件开发人员不但要有平和的心态,且具备一定的耐心和毅力,还要有勇于克服一切困难的勇气和信心!只要我们做得足够好,那么可能解决一个具体疑难的过程带有一定偶然性,但我们终将排除所有阻碍!

    所以说,嵌入式系统调试过程就是一个更加深入了解我们的目标系统以及系统中的每个单元模块特性的过程,就是一个锻炼我们的逻辑思维和分析推理能力的过程,就是一个开拓思路、向习惯思维和权威挑战的过程,就是一个培养严谨细致的工作态度和实事求是工作作风的过程,就是一个锻炼我们耐力和毅力的过程,最终是一个学习进步的过程!

    嵌入式系统调试诊断能力的提升是一个长期实践、积累、提高的过程!


关键字:嵌入式系统  调试方法

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/article_2018021437805.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:典型的Linux设备驱动程序的代码
下一篇:μC/OS-Ⅱ下设备驱动的设计与实现分析

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

Hyperstone将亮相在2018深圳国际嵌入式系统展上

康斯坦茨,德国 04 12 2018 – 闪存控制器设计公司Hyperstone,确定将于2018年12月20日至22日在中国深圳会展中心9号馆所 举办的深圳国际嵌入式系统展上展出。  展会期间参观摊位1A53,了解Hyperstone提供的闪存控制器和配套的软件解决方案;这些广泛的产品组合旨在最具挑战性的应用之下实现可靠的存储。这将侧重于闪存控制器的产品组合,用于实现最安全、坚固耐用的工业用闪存盘。解决方案涵盖CF卡、USB、SATA、SD和eMMc控制器,适用于高耐用性的内存模块和记忆卡,以及板上电子盘执行。  为了补充闪存控制器
发表于 2018-12-04
Hyperstone将亮相在2018深圳国际嵌入式系统展上

嵌入式系统联谊会10周年纪念活动圆满结束

2018年11月24日,“嵌入式系统联谊会10周年纪念暨嵌入式系统联谊会第24次会议”在北航隆重召开。全国各地从事嵌入式教育、研发和科技媒体界的朋友们近200人汇聚一堂,共同回顾了过去10年里嵌入式系统联谊会的发展历程以及为推动嵌入式技术发展所做的点点滴滴,同时,一起展望了嵌入式技术未来的发展趋势,用嵌入式系统独有的视角诠释大科技!嵌入式系统联谊会委员北航何立民、北理工马忠梅、北工大韩德强、北大林金龙、天大郭玮,太原理工常晓明和北邮邝坚教授,以及孙加兴和曹重英博士到会。会议由嵌入式系统联谊会秘书长何小庆主持,北京航空航天大学资产公司副总经理、北航科技园总经理、北航文化传媒集团总经理刘小龙先生为本次会议致辞。刘总对联谊会成立10周年
发表于 2018-12-03
嵌入式系统联谊会10周年纪念活动圆满结束

庆祝嵌入式系统联谊会正式成立10周年,第24次即将上演

2018年是嵌入式系统联谊会正式成立10周年,过去的10年里,在嵌入式系统产学研各界朋友的支持下,联谊会成功地举办了23次主题讨论会,讨论的议题涉及嵌入式系统、集成电路、物联网和人工智能等多个技术和产业领域,以及教育和人才培养。嵌入式系统联谊会主题讨论会举办地从北京延伸到上海、深圳和成都, 超过2000人次参加了我们的会议,媒体报道超过160余篇,《单片机与嵌入式系统应用》《电子产品世界》等媒体写了专题报道。此外,联谊会还与其他知名的机构合作协办了若干场相关的产业活动。在不懈的努力之下,嵌入式系统联谊会在中国嵌入式系统业界具有了一定的知名度!11月24日,上午主题讨论会是一场大型的报告会,主题是“物联网与人工智能时代的嵌入式系统
发表于 2018-11-12
庆祝嵌入式系统联谊会正式成立10周年,第24次即将上演

干货:如何快速开发嵌入式系统的交互界面?

串口屏 2010年以前的串口屏大多是通过上位机将要显示的内容预先下载到屏幕中,然后发送预设指令将各种界面显示出来。2014年后,功能更强大的组态屏使串口屏的产业链日趋成熟。由于串口屏的显示依赖其自带的库,所以其显示灵活度在一定程度上依旧受限。  图2  组态串口屏(图片来源网络) 2 . 嵌入式QT/E 相比于直接使用串口屏,嵌入式的QT/E的灵活度、自由性极大丰富。嵌入式的QT/E可以认为是QT在linux上的的精简版,它在底层摒弃了Xlib库以适应嵌入式应用的开发。使用 Qt 只需一次性开发应用程序,无需重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序
发表于 2018-09-19
干货:如何快速开发嵌入式系统的交互界面?

论存储芯片对国家发展的重要性

嵌入式系统芯片的概念在存储行业的具体应用,无论是系统芯片还是存储芯片,都是通过在单一芯片中嵌入软件,实现多功能和高性能,以及对多种协议、多种硬件和不同应用的支持。  存储芯片可分为易失性存储器和非易失性存储器,目前主流的存储器是DRAM与NAND Flash,两者占存储器市场的九成以上。  存储芯片的作用  存储芯片的作用是为访问性能、存储协议、存储介质等多种应用提供高质量的支持。随着大数据、云计算等更为复杂的场景,对存储芯片性能提出了更高的要求,这也为国产存储芯片企业提供了机遇。  存储芯片除了满足基本的存储功能,未来,带有各种处理器内核的SoC以及集成更多处理能力的FPGA产品将成为市场新需求。对于存储市场而言,借助FPGA来实施
发表于 2018-08-07
论存储芯片对国家发展的重要性

ADI全新嵌入式系统发布,大大提升汽车音频系统性能

ADI今天推出一款嵌入式系统,用于为电动(EV)和混合动力汽车(HEV)产生发动机声音。通过采用ADSP-BF706数字信号处理器和电动汽车警示音系统(EVWSS)固件,北美和全球其他地区的汽车制造商能够满足电动和混合动力汽车低速行驶时对外部发动机声音的未来安全规范要求。 ADI解决方案包含完整的硬件和固件参考设计。利用ADSP-BF706或ADAU1450数字音频处理器扩展后,分别可用于高性能应用或入门级应用。ADSP-BF706也可用于制造车舱内的发动机声,帮助改善车主的驾驶体验。ADSP-BF706采用存储器映射四通道SPI存储器,能够更快速、更便捷地访问存储的用于产生发动机声音的音频文件。它最多可以同时访问24
发表于 2018-07-17
ADI全新嵌入式系统发布,大大提升汽车音频系统性能

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved
pt type="text/javascript" src="//v3.jiathis.com/code/jia.js?uid=2113614" charset="utf-8">