文档库 最新最全的文档下载
当前位置:文档库 › 单片机程序调试小技巧

单片机程序调试小技巧

单片机程序调试小技巧
单片机程序调试小技巧

《匠人手记》网络版 程序调试(除错)过程中的一些雕虫小技

作者:程序匠人

发布日期:2009-11-26

《匠人手记》封面

E-MAIL:zj_artisan@https://www.wendangku.net/doc/f016461770.html,

《匠人的百宝箱》博客:https://www.wendangku.net/doc/f016461770.html,/

《匠人手记》edn书友会:https://www.wendangku.net/doc/f016461770.html,/628/

《匠人手记》21ic书友会:https://www.wendangku.net/doc/f016461770.html,/iclist-63.html

手 记 目 录

一、前言 (1)

二、磨刀不误砍柴功 (1)

三、优先调试人机界面 (2)

四、慢镜头的威力 (2)

五、快镜头的威力 (3)

六、程序中的黑匣子 (3)

七、设卡伏击,拦截流窜犯 (4)

八、向猎人学习挖坑设陷阱的技术 (5)

九、程序中的窃听器 (6)

十、拉闸睡觉!统一管理调试代码 (7)

十一、附录:《匠人手记》简介 (9)

1、《匠人手记》内容简介 (9)

2、《匠人手记》目录 (9)

3、《匠人手记》封面及内页 (10)

4、《匠人手记》热销情况 (11)

5、《匠人手记》被各界推荐 (12)

6、《匠人手记》读者热评 (13)

7、购书渠道 (13)

8、相关连接 (14)

9、《匠人手记》书友会Q群 (14)

10、《匠人手记》网络版版权声明 (14)

程序调试(除错)过程中的一些雕虫小技

一、前言

调试程序,是软件开发过程中的一个必不可少的环节。这篇手记,匠人试着来整理一下日常调试过程中用到的技巧。

说到“技巧”,这个词自从被所长批臭之后,匠人就吓得不敢再提,生怕一不小心就暴露了思想的浅薄和眼光的局限,呵呵。所以咱们不叫“技巧”,干脆低调点,就叫“雕虫小技”吧。

这里所讨论的“调试”技巧,有些是必须结合开发工具本身的功能来实现,而有些可以通过烧录芯片来验证。

各种开发工具,提供的功能多少强弱也不尽相同,这些方法也未必都能套用。仅供参考吧。

最后说明一下,这是没有草稿的帖子,匠人仍然以不定期连载的方式,边写边发边改。可能结构会比较混乱。欢迎大家一起参与讨论。

二、磨刀不误砍柴功

在调试之前,需要掌握以下一些基本功:

1、熟悉当前的开发(调试)环境,比如:设置断点、单步运行、全速运行、终止运行,查看RAM、查看堆栈、查看IO口状态……总之,要熟练掌握基本操作的方法,并深刻了解其中意义。

2、了解芯片本身的资源和特性。

3、了解一点汇编语言的知识。(本来匠人是准备写“精通”的,但考虑到现状,还是“放低”这方面的要求罢了)。

4、掌握基本的电路知识和排错能力。(软件调试有时也会牵涉到硬件原因。总不能连三极管的好坏都不能识别吧?)

5、万用表、示波器、信号发生器……这些工具总该会用吧?

6、搜索、鉴别资料的能力。(内事问百度、外事问古狗、有事没事上21ic网)

7、与人沟通,描述问题的能力。(调试36计的最后一计——就是向他人讨教。当然,你得把话说明白才行)

差不多了,如果上述7把砍柴刀磨好了,就可以开始调试了。接下来,请调入你的程序……

——什么?你说你程序还没写?

——匠人倒塌……

三、优先调试人机界面

面对程序中的一大堆模块,无从下手是吗?好吧,匠人告诉你,先调显示模块,然后是键盘。

为什么要先调显示模块?道理很简单,我们说“眼睛是心灵的窗户”,同样,“显示是程序的窗户”。一旦把显示模块调试好了,就可以通过这个窗口,偷窥(天呐,这两个居然是敏感字!)程序内部的数据和状态了。

然后紧接着,就是调试键盘模块。有了这个按键,我们就可以人工干预程序的运行了。

——什么,你的程序没有显示和按键?

——这位童鞋,你真不幸,请去检查一下自己的人品和星座运程先。谢谢。

实在是没显示?再看看系统有蜂鸣器吗?如果侥幸有的话,也能凑合着发发提示声音吧?

或者,有串口吗?可以考虑借助PC 端的串口调试软件来收发数据,这也是一个间接的人机交流方法。

总而言之,要尽快建立人机交流界面。

四、慢镜头的威力

2009年春晚捧红了魔术师刘谦(这位老兄名“谦”,其实一点都不谦虚——长的帅不是错,出来拽就是罪过了!),也勾起了大家对魔术的浓厚兴趣,如何识破那些快速的眼花缭乱的魔术手法呢?很简单,用慢镜头回放即可。据说刘谦那个橡皮筋魔术的手法就是被人如此识破的。

回到我们单片机上来。我们知道,单片机的运行速度,一般都是在几M到几十M(当然,也有为了节能而采用几十K的低速)。不管怎么样,这个速度都远远超出了我们人眼能够分辨的速度。眼睛一眨,也许几M条指令已经执行过去了。

比如说数码管显示(假设有4位数码管)。平时我们看到数码管同时点亮着,但是实际上,这4个数码管是逐个扫描的。在任意一个时刻,只有一位数码管被点亮。在微观上,我们可以进一步把每位数码管的扫描动作细分为以下几个步骤:

1、关闭上一位数码管的位选信号;

2、输出当前位数码管的段选信号;

3、开启当前位数码管的位选信号;

4、启动1ms延时;

5、延时结束后,指针移动到下一位数码管,并重复上述4个步骤,如此周而复始。

你看,这样是不是就像用一个慢镜头在分解显示扫描的动作了?

那么如何实现这个慢镜头呢?方法很多:

1、单步运行(需要仿真器支持);

2、在每一步分动作之后设立断点(需要仿真器支持);

3、在每一步分动作之后插入足够的延时,让我们肉眼可以看清楚这些分动作(不需要仿真器,适合烧片测试)。

通过慢镜头的反复回放,我们就可以发现,到底是哪一个分动作出现了问题。

这个技巧,不仅仅适用于调试显示程序,也适用于按键扫描或其它模块。只要一个功能可以被细分为若干的动作,那么这一招“慢镜头分解法”都是可以使用的。

五、快镜头的威力

前面已经讲过慢镜头,这回再讲快镜头。

慢镜头的作用的把程序的运行节奏降低,以便我们能够“一帧一帧”地观测程序的运行状态。而快镜头的作用,则相反,就是让程序的运行节奏变快,让我们验证一些原本需要消耗较多等待时间的功能。

比如说,一个定时功能,定时范围是可调的,为1~24小时。如果我们要去验证,总不能傻等1~24小时吧?

怎么办呢?快镜头来了。

我们知道程序中的时间,是靠一级一级的计时器累计上来的。比如一个程序中分别有“时、分、秒”三个计时器单元。依次计数,逢60进一。“秒”计满60次了,则“分”+1;“分”计满60次了,则“时”+1;“时”计数超过设定值了,我们就可以判定定时结束。

那么我们只要修改一下“分”到“时”的进位关系。比如改成:“分”+1;“分”计满1次(原本是60次)了,则“时”+1。这样一来,整个定时系统速度就比原来提高60倍。测试起来就很省时间了。

当然,测试完成后,记得要把刚才做的测试代码改回原样哦。

举一反三,“快镜头”技巧,不仅仅用在定时方面,也可以用在计数方面。通过对数据的变化“加速”,来加快我们的测试速度。

——什么,你喜欢磨洋工,愿意花24小时去测试那个定时功能?

——哈哈,放心,我不会告诉你的老板的——除非他使出美人计来对付我。欧耶!六、程序中的黑匣子

某年某月的某一天,一架飞机以优美的抛物线形状,一头栽到海里去了……几天后,人们找到了飞机的黑匣子,里面记录了飞行员的最后一句话:“天呐,我看到火星人了!……”

以上空难情节我们经常会通过新闻看到吧(当然,最后一句是匠人版的科幻情节)。看看,飞机的黑匣子可以记录并再现现场,多么神奇!欧耶!

我们在调试程序时,也可以借鉴这个方法,给程序按装一个黑匣子。程序中的黑匣子其实就是一个在内存中开辟的队列。队列的原理我们很清楚,先进先出,后进后出(与飞机黑匣子的特性相同)。

比如说吧,假设我们的系统在工作中,某个输入量的采样值经常受到不明原因的扰动。我们要摸清这种扰动的规律,以便对症下药。但是这种扰动稍纵即逝。

我们的困扰是:程序正常运行时看不出规律,单步走又难以捕捉扰动。怎么办?

有没有办法,把扰动记录下来?

当然可以。

我们可以利用系统里剩余的RAM,开辟一块单元,做成队列。并写段测试程序,定时把新采样值压入队列。

然后我们让程序运行,在需要的(任意)时刻,让程序停下来。这时,队列里记录的就是最新一批采样数据。

只要队列的深度足够大,我们就可以找出扰动的规律来。

——什么,你问我什么叫队列?

——匠人曰“天呐,我看到火星人了!……”

七、设卡伏击,拦截流窜犯

警察抓流窜犯的场面我们都很熟悉了。一般的方法,就是以案发现场为中心,在犯罪分子逃窜的必经路口,设卡盘查。有道是天网恢恢疏而不漏,叫你插翅也飞不过去。

有时,程序中也会出现这样一个“流窜犯”,它就是PC指针。

对于一个未经调试的不成熟的程序来说,导致PC指针跑飞的因素很多,我们逐条列举并分析之:

1、电磁干扰(如果不是在现场,那么这一条可以暂时不考虑。因为在调试环境下一般不会有干扰);

2、程序结构错乱(喜欢用jmp或goto类指令的尤其要注意这点);

3、堆栈溢出或错乱,导致PC指针出错;

4、PC指针被错误改写(有些芯片PC指针存储单元和其它RAM单元的访问方法是一样的,很容易被误写);

5、数据错误,导致程序没有按照预期路径运行;

6、看门狗溢出(原因一般是因为看门狗设置不当、喂狗不及时、程序堵塞或者程序死循环);

7、中断被意外触发;

8、外部电路问题,比如电源不稳等等;

9、其它……

当我们开始怀疑PC指针时,我们首先要做的是确认PC指针是否跑飞了,其次要找到PC指针跑飞的证据。

我们可以在不同的分支路口,或者在我们怀疑的地方,设立断点,看程序是否走了不该经过的路径。

举个例子,比如我们怀疑程序运行中看门狗发生了溢出复位,那么很简单,我们只需要在初始化入口设立一个断点,让程序运行。正常情况下,程序只会经过一次该断点。如果再次经过该断点被拦截,那么我们就可以初步确诊“看门狗发生了溢出复位”。

再举个例子,比如程序中某个环节有A、B两个分支,正常时只走A分支,不正常时才走B分支。那么我们可以在B分支设立断点,程序一旦异常,走入B分支,就可以被拦截下来。

程序被拦截下来后,我们可以勘察现场,查看RAM区内容和程序刚走过的路径,从中分析导致程序PC指针错乱的原因。

当然,并不是每一次伏击守候都能一举擒获流窜犯(敌人是“狡猾”的,呵呵)。这就需要我们多一份耐心和技巧。通过不断调整断点位置来改变拦截地点。逐渐逼近并找到根源(流窜犯的老巢),然后一举拿下。

八、向猎人学习挖坑设陷阱的技术

上一回说到,在程序中设卡(断点),可以拦截流窜犯(程序流程错误)。实际上,断点的功能可强大了,不但可以拦截程序流程错误,也可以拦截数据错误。当然,这需要一些辅助手段。

还是以前面提到的一个例子来说。比如某个采样值(当然,也不一定是采样值,在这里也可以是RAM中任意单元中的值)受到未明因素影响,经常“乱跳”。这种数据出错的原因,可能如下:

1、计算错误(比如溢出),导致结果出错;

2、被其它程序段误改写;

3、其它原因……

当数据出错后,我们希望能够在最快时间内,让程序停下来,这样才能有效查出是哪一段程序出了问题。

有些调试环境本身可以捕捉数据错误,并产生断点中断。这当然最好不过。但是如果调试环境本身不提供这种捕捉功能,那么就需要我们自己来制造机关了。

看看猎人是是如何做的:他们会在猎物经过的地方,挖个坑,上面盖上浮土。当小型动物经过时,浮土不会塌陷。而当体重较大的动物经过时,它们的体重就会压垮浮土,掉进猎

人的陷阱。

猎人的这个陷阱机关,妙就妙在是它“智能”的,会根据动物的体重进行筛选。

轻巧的小白兔来了——放过,笨重的大狗熊来了——捕获!欧耶!

好了,回到程序中来,假设我们要监控的那个RAM单元,正常值域为0~9;那么我们可以写一段测试代码,判断数值是否>9,根据判断结果执行两个分支,并在那条错误的分支路径上设置断点。

如果数据没有出错,程序会一直运行(小白兔请放心过去);直到数据错误发生,断点会自动停下来(大狗熊给我拿下)。

我们可以把这段测试程序,插入在“狗熊出没”的地方,“守株待兔”(其实“守坑待熊”)。

接下来的事情,就跟上回说的抓流窜犯原理差不多了。

——什么,你喜欢吃兔肉?不喜欢吃熊掌?

——你也太没有爱心了,唉……

九、程序中的窃听器

1、你的定时中断频率是否等于设想的那个值?

2、你的主程序循环一次花了多少时间?

3、你的程序中某一次复杂计算需要耗费多少时间?

4、你的程序里某个动作发生的具体时刻是什么时候?

5、……

——也许你不关心这些时间,那么你就不必看这一回了。

但是——

1、当我们的计时时钟发生偏差时,我们希望知道定时中断是否正常发生了;

2、当我们的程序任务较多,并已经导致任务堵塞时,我们需要知道主程序运行一圈的时间是多少,以便我们合理分割任务,避免堵塞;

3、同样,为了避免任务堵塞,我们要了解那些复杂计算所消耗的时间,并采取必要的措施(优化算法、分时间片执行、调整执行频率)来保证系统的实时性;

4、当程序中某些动作与其它动作或状态存在时间上的关联时,我们必须严格控制它的执行时机,确保它在正确的时刻被执行到;

5、……

我们如何才能从外部,对这些这些发生在程序内部的时间(时刻)进行精准的测量?

我们当然不能钻到芯片里面去监视每一条指令的运行情况。但是,我们可以学习一下克格勃,给程序安装个窃听器。

具体方法:

1、首先,你需要一台示波器。没有的话,可以去偷、去抢、去骗。总之,最终你搞定了这台示波器,欧耶。

2、其次,你的芯片上要有一个空余的输出口用作测试口。没有的话,就拆东墙补西墙吧,先把不相关功能的IO口挪用一下啦。总之,最终你搞定了这个测试口,欧耶。

3、接下来,你可以在你要“监听”的程序段中,写一小段程序,对那个测试口取反(或者输出一个脉冲)。

4、最后让程序全速运行起来,你就可以用示波器来监听程序的运行状况了。

以本回开始举的几个例子来分析:

1、如果要测试定时中断频率,只要在中断中对这个测试口取反,即可通过示波器观测中断频率;

2、如果要测试主程序运行周期,只要把取反指令放在主程序循环圈中,即可;

3、如果要测试一次复杂计算(或其它动作)需要消耗多少时间,我们只需在计算之前把测试口变为高电平,等到计算结束后立即把输出口恢复到低电平,这段高电平的时间长度,即为计算消耗时间;

4、如果想知道两个动作之间的延时时间,我们也可以按照上一条方法一样,在两个动作发生前把测试口分别取一次反。就可以通过示波器轻松测试出来。

5、根据实际案例的具体情况,我们可以把这种窃听技术变换出更多花样。比如我们可以用两个IO口做测试口,同步检测两个事件的发生时刻,并测量其相互时间关系。等等……

6、引申开去,这个测试口不仅仅可以检测时间,也可以用来检测内部数据的变化。比如当某个数据的值发生“越界”时,输出一个高电平(平时为低电平)。

等到我们取得我们想要的测试数据,我们可以把这个临时的测试口功能撤销。同时,那些测试代码也可一并删除或屏蔽。

总结:把程序内在的、不直观的、快速的一些状态变化,通过IO口传递出来,以便我们观测。——这就是我们这一回所讲的“窃听器”调试技巧的精髓。

——警告,请勿把“窃听器”安装在女生宿舍哦!

——那样的话,匠人岂不就成为教唆犯了。罪过,罪过。。。。。

十、拉闸睡觉!统一管理调试代码

前面介绍的几种方法,需要在程序中增加一些临时性的调试代码。

有些调试代码是无害的,比如只是一些延时指令,或者是在不使用的IO口上有一些输出而已。

但另一些调试代码,与正式要求的程序功能是相冲突的。那么这些代码在完成调试之后就应该被删除或屏蔽掉。

那么会不会出现意外,把本该被删除的代码漏删了?结果埋下祸害?——如果调试代码少,出错的概率比较低,只要认真仔细点还好办;但是如果程序中的调试代码写得比较多,那么确实很担心会发生这种问题。

或者另一种情况,就是前脚把调试代码删除或屏蔽掉,后脚发现还需要再调试,又要重新输入或打开那些代码?

如何管理这些代码呢?这个我们要向宿舍管理员学习了。他们是这么做的,给所有房间安装一个总电闸。到了晚上11点就把总闸一拉,看书的、打牌的、喝酒的、胡侃的、泡妞的、夜游的、丫们都给我老老实实睡觉去吧!

程序中,这样的总闸也是可以通过条件编译的方式来实现的。就像这样:

//#define TEST_MD //调试状态标志(在调试时打开,正式烧录芯片时屏蔽)

//在编写调试代码时,采用下面的形式:

#ifdef TEST_MD //如果是调试状态,则编译这段代码

……

……

#else //如果不是调试状态,则编译这段代码

……

……

#endif

一个总闸,把管理简单化了。欧耶!

下面是无事生非电视台广告时间,不喜欢广告的朋友可以换频道了……

十一、附录:《匠人手记》简介

1、《匠人手记》内容简介

本书是作者在从事单片机开发与应用的过程中,将实际经验教训和心得感悟加以总结,整理而成的工作手记。每篇手记论述一个专题,独立成篇、同时又相互关联。全书内容包含入门基础、经验技巧、设计案例、网络杂文等四个部分。

书中将网络中自由的语言艺术与现实中严谨的科学技术相结合。全书的风格以轻松诙谐的笔调为主。作者力图摆脱传统技术类书籍的说教式的表述形式,让读者耳目一新,在轻松的交流过程中获得共鸣。

本书的读者对象为单片机领域的开发工作者、以及有志于学习钻研单片机技术的人员。

z书名:《匠人手记:一个单片机工作者的实践与思考》

z定价:39元

z作者:张俊(网名:程序匠人)

z书号:978-7-81124-297-3

z丛书名:博客藏经阁丛书

z出版日期:200804

z开本:787×960 1/16开

z字数:549千字

z页数:363页

2、《匠人手记》目录

第一部入门基础

手记1 单片机入门知识与基本概念

手记2 单片机的汇编指令系统

手记3 编程思路漫谈

手记4 程序设计阶段漫谈

手记5 MC68HC908应用札记

手记6 天梯——MSP430学习札记

手记7 EMC单片机指令应用的误区与技巧

手记8 EMC单片机的伪指令与宏的应用

第二部经验技巧

手记9 十种软件滤波方法

手记10 一阶滤波算法之深入研究

手记11 分段线性插值算法之深入研究

手记12 移位法在乘除运算及数制转换中的妙用

手记13 按键漫谈

手记14 单键多击的检测程序

手记15 串口七日之创世纪篇

手记16 用普通IO口实现单线单工通讯

手记17 用普通IO口检测模拟值

手记18 功率调节与过零检测

第三部设计案例

手记19 梦幻时钟摇摇棒大揭秘

手记20 汽车组合仪表开发手记

手记21 空调遥控器开发手记

手记22 手机锂电池充电器设计白皮书第四部网络杂文

手记23 《大话篇》系列

手记24 《匠人夜话》系列

手记25 匠人的论坛文集

手记26 匠人的博客文集

手记27 21icbbs人物志

手记28 《网络心路》之匠人版(连载)

3、《匠人手记》封面及内页

图 1.1:《匠人手记》样书

图 1.2:《匠人手记》在当当网同类图书的销售排名中第一

图 1.3:《匠人手记》在互动出版网同类图书的销售排名中第一

图 1.4:《匠人手记》在END网站签名热卖

图 1.5:《匠人手记》在上海书城被列为推荐图书

图 1.6:《匠人手记》被北航出版社列为推荐图书

图 1.7:《匠人手记》被END杂志列为推荐图书

图 1.8:《匠人手记》被读者热评

7、购书渠道

z互动出版网(china-pub):https://www.wendangku.net/doc/f016461770.html,/39724

z当当网(dangdang):https://www.wendangku.net/doc/f016461770.html,/product.aspx?product_id=20202417 z淘宝网(taobao):

https://www.wendangku.net/doc/f016461770.html,/browse/0/t-95-----------------g,xwz4rs6k226mo----------------4 0--commend-0-all-0.htm?at_topsearch=1

z更多购书渠道:https://www.wendangku.net/doc/f016461770.html,/user1/349/archives/2008/47460.html

8、相关连接

z《匠人的百宝箱》博客:https://www.wendangku.net/doc/f016461770.html,/

z《匠人手记》edn书友会:https://www.wendangku.net/doc/f016461770.html,/628/

z《匠人手记》21ic书友会:https://www.wendangku.net/doc/f016461770.html,/iclist-63.html

9、《匠人手记》书友会Q群

备注:请勿重复申请!

z《匠人的百宝箱》俱乐部:1109916

z《匠人手记》书友会1:40177359

z《匠人手记》书友会2:36337921

z《匠人手记》书友会3:32426080

z《匠人手记》书友会4:18931920

z《匠人手记》书友会5:9084424

z《匠人手记》书友会6:72049039

z《匠人手记》书友会7:22260690

z《匠人手记》书友会8:69629280

z《匠人手记》书友会9:56038600

z《匠人手记》书友会10:4866691

10、《匠人手记》网络版版权声明

《匠人手记》网络版,相当于《匠人手记》纸媒版的尝鲜版和补充版。该系列文章都为匠人原创或精心整理,其中耗费了匠人的诸多心血。这些文章推出以来,一直受到网友的欢迎。也有许多网站给予转载和推荐,匠人对此由衷感谢。

但是我们发现个别网站有意将《匠人手记》网络版的内容拆开来发表,不但隐去了作者和出处等信息,而且还贴上他们自己网站原创的标签。匠人觉得这是一种不尊重原作者的行为。

在此,匠人特声明如下:

《匠人手记》网络版的正式发布版本均为PDF格式。匠人欢迎各方收藏或转载。但是,匠人要求转载者必须也以PDF格式提供。并且,转载者不得对PDF格式的《匠人手记》网络版文件内容进行修改。转载者不得利用《匠人手记》网络版谋取经济利益。《匠人手记》网络版中的设计案例(包含程序、电路及设计思路等)仅供学习,请勿应用在商业项目中。如有需求,请与匠人取得联系。

对原创作者的版权尊重,是鼓励作者继续创作的力量源泉。大伙能到《匠人的百宝箱》来做客,都是匠人的朋友。希望不要做伤害朋友的事情,呵呵。

图 1.9:《匠人的百宝箱》Logo

单片机系统等的硬件调试方法_百度文库

单片机系统等的硬件调试方法 1、首先是焊接的顺序问题。当初板子做好以后,我一口气就把所有的元件焊上去了,这样对于没有调试过的板子,就很难找到原因。所以焊接的顺序很重要,应该是应该按功能划分的器件进行焊接,顺序是功能部件的焊接--调试(OK--另一功能部件的焊接,这样容易找到问题的所在。 2、如果在调试按功能划分的器件上出现问题,可以按以下步骤进行: 1)检查原理图连接是否正确 2)检查原理图与PCB图是否一致 3)检查原理图与器件的DATASHEET上引脚是否一致 4)用万用表检查是否有虚焊,引脚短路现象 5)查询器件的DATASHEET,分析一下时序是否一致,同时分析一下命令字是否正确(注意,命令字的顺序很重要,前些日子调试INTEL e28F640这款flash是的时候,在对其擦除和写操作的时候,就碰到了这样的问题) 6)有条件的可以用示波器。如我就是通过示波器对SRAM各个引脚进行检查,发现地址线都是有信号的,而数据线无信号出现,才找到问题所在。 7)飞线。用别的的口线进行控制,看看能不能对其进行正常操作,多试验,才能找到问题出现在什么地方。 3、多观察,多思考。如我前些日子在调试320×240点阵LCD的时候,发现怎么也不能出现图像,后来在偶然的机会下,发现LCD在MPU的CS2口线下,出现闪动

的情况,猜测这时候有数据写入到LCD中,仔细研究才发现,MPU的DATA0-7线与74LVC245的A0-7连接在一起,MPU的通过一个GAL16V8或是与非门等芯片进行逻辑组合后与74LVC245的OE引脚相连,这样MPU只有在某一地址范围内才可以进行数据读写操作。所以在调试过程中,对于出现的任何现象都不要放过,问题的解决就是从一些小的现象入手的。山重水复疑无路,柳暗花明又一村。 4、有可能的情况下,最好焊两块板子以上,这样才好有个比较,硬件上很小的问题有很多时候是很难发现的。 5、软件的调试要和硬件配合进行,往往问题可能不是硬件上的。 单片机应用系统硬件调试技巧 在单片机开发过程中,从硬件设计到软件设计几乎是开发者针对本系统特点亲自完成的。这样虽然可以降低系统成本,提高系统的适应性,但是每个系统的调试占去了总开发时间的2/3,可见调试的工作量比较大。单片机系统的硬件调试和软件调试是不能分开的,许多硬件错误是在软件调试中被发现和纠正的。但通常是先排除明显的硬件故障以后,再和软件结合起来调试以进一步排除故障。可见硬件的调试是基础,如果硬件调试不通过,软件设计则是无从做起。本文结合作者在单片机开发过程中体会,讨论硬件调试的技巧。 当硬件设计从布线到焊接安装完成之后,就开始进入硬件调试阶段,调试大体分为以下几步。 1 硬件静态的调试 1.1 排除逻辑故障 这类故障往往由于设计和加工制板过程中工艺性错误所造成的。主要包括错线、开路、短路。排除的方法是首先将加工的印制板认真对照原理图,看两者是否一致。

CAD调试小技巧

关于CAD比例调试和标注样式的几点说明 一、CAD比例调试说明: 1.绘图 用CAD绘图时,一般按照1:1的比例绘制,换句话说,如果绘制1m的直线,则在CAD画线命令中输入1000(单位为mm),如图1所示。 图1 2.绘制图框 按照如上所说绘制完成所有工程图后,根据图号要求设置比例,现在以二号图为例进行说明,图2是按照1:1绘制的直线,现要将其设置为二号图进行打印,所以按照1:1绘制完成所有工程图后,根据图号尺寸绘制图框(二号图为594mm ×420mm),图框绘制见图3。 图2 图3

3.比例设置 比例设置方法有两种: 方法一:按比例放大图框,根据所绘图形大小,预估图框需要放大倍数(图框放大比例原则是图形在图框中适中),本例中图框放大两倍,缩放命令是SC。将图框全部选中,输入“SC”(如图4)然后回车,选择基点输入放大倍数2(如图5)。然后将图形放入放大后的图框中(见图6),图形比例即为1:2,这样就完成了图形比例设置。但是图框不再是标准图框,而是标准图框的倍数,所以,只要在打印时设置为二号图框打印,对出图无影响。 图4 图5

图6 方法二:按比例缩小图形,根据所绘图形和图框大小,估计图形需要缩小倍 数(原则和方法一相同),本例中估计需要缩小2倍。和方法一一样,选中所有 图形,输入SC 回车,然后选择基点输入0.5(即X 1 ,X 为缩小倍数) ,然后将图 形移入图框中(见图7)。 图7 使用这种方法后,它的标注尺寸不再是实际尺寸,现在就需要调整测量单位比例因子。根据流程一操作,在测量单位比例因子中输入图形缩小倍数2,然后确定,图形比例即为1:2,结果见图8。

软件调试技巧

软件调试技巧 一、软件调试方法 软件调试有很多种方法。常用的有4种,即强行排错法、回溯排错法、归纳排错法和演绎排错法。 1.强行排错法 这种方法需要动脑筋动的地方比较少,因此叫强行排错。通常有以下3种表现形式: ●打印内存变量的值。在执行程序时,通过打印内存变量的数值,将该数值同预期的数值进行比较,判 断程序是否执行出错。对于小程序,这种方法很有效。但程序较大时,由于数据量大,逻辑关系复杂,效果较差。 ●在程序关键分支处设置断点,如弹出提示框。这种方法对于弄清多分支程序的流向很有帮助,可以很 快锁定程序出错发生的大概位置范围。 ●使用编程软件的调试工具。通常编程软件的IDE集成开发环境都有调试功能,使用最多的就是单步调 试功能。它可以一步一步地跟踪程序的执行流程,以便发现错误所在。 2.回溯排错法 这是在小程序中常用的一种有效的调试方法。一旦发现了错误,可以先分析错误现象,确定最先发现该错误的位置。然后,人工沿程序的控制流程,追踪源程序代码,直到找到错误根源或确定错误产生的范围。 3.归纳排错法 归纳法是一种从特殊推断一般的系统化思考方法。归纳法调试的基本思想是,从一些线索(错误的现象)着手,通过分析它们之间的关系来找出错误,为此可能需要列出一系列相关的输入,然后看哪些输入数据的运行结果是正确的,哪些输入数据的运行结果有错误,然后加以分析、归纳,最终得出错误原因。 4.演绎排错法 演绎法是一种从一般原理或前提出发,经过排除和精化的过程来推导出结论的思考方法。调试时,首先根据错误现象,设想及枚举出所有可能出错的原因作为假设。然后再使用相关数据进行测试,从中逐个排除不可能正确的假设。最后,再用测试数据验证余下的假设是否是出错的原因。 二、调试的原则 调试能否成功一方面在于方法,另一方面很大程度上取决于个人的经验。但在调试时,通常应该遵循以下一些原则。 1.确定错误的性质和位置的原则 用头脑去分析思考与错误征兆有关的信息,避开死胡同。调试工具只是一种辅助手段。利用调试工具可以帮助思考,但不能代替思考。通常避免使用试探法,最多只能将它当作最后的手段,毕竟小概率事件有时也会发生。 2.修改错误的原则 在出现错误的地方,很可能还有别的错误。修改错误的一个常见失误是只修改了这个错误的征兆或这个错误的表现,而没有修改错误本身。当新修正一个错误的同时又引入新的错误。 三、有效减少调试时间 1.绘制程序流程图 一些程序员认为,绘制程序流程图是件繁琐的事,而且浪费时间。其实不然,当读者对着偌大的程序一筹莫展时,面对纷纭复杂的关系理不出头绪时,使用程序流程图绝对可以事半功倍。 因此建议在编制程序前先绘制流程图,这样编程的思路有条理,调试时同样会有条不紊。若编制程序之前没有绘制流程图,当排错没有进展时,可以马上编写流程图。你会发现,程序中某些分支或细节被忽略了,这些细节可能就是程序出错的地方。 2.不要过多地依赖单步调试 有些程序对时间很敏感。数据只在那么一瞬间有效,可谓稍纵即逝。所以等到单步执行到那里时,

keil软件调试单片机程序

先说一个概念:调试,在企业程序设计里(我把企业商务类型的软件开发叫企业程序设计,把单片机与驱动程序这样接触底层汇编与硬件相关的程序设计叫底层程序设计),调试一般都用来跟踪变量的赋值过程,以及查看内存堆栈的内容,查看这些内容的目的在于观察变量的赋值过程与赋值情况从而达到调试的目的。由于企业程序的宿主就是开发它的计算机本身,因此企业程序设计比起底层程序设计,特别是单片机的程序设计调试来的更直观,调试也更方便。 单片机的程序设计调试分为两种,一种是使用软件模拟调试,意思就是用开发单片机程序的计算机去模拟单片机的指令执行,并虚拟单片机片内资源,从而实现调试的目的,但是软件调试存在一些问题,如计算机本身是多任务系统,划分执行时间片是由操作系统本身完成的,无法得到控制,这样就无法时时的模拟单片机的执行时序,也就是说,不可能像真正的单片机运行环境那样执行的指令在同样一个时间能完成(往往要完成的比单片机慢)。为了解决软件调试的问题,第二种是硬件调试,硬件调试其实也需要计算机软件的配合,大致过程是这样的:计算机软件把编译好的程序通过串行口、并行口或者USB口传输到硬件调试设备中(这个设备叫仿真器),仿真器仿真全部的单片机资源(所有的单片机接口,并且有真实的引脚输出),仿真器可以接入实际的电路中,然后与单片机一样执行。同时,仿真器也会返回单片机内部内存与时序等情况给计算机的辅助软件,这样就可以在软件里看到真实的执行情况。不仅如此,还可以通过计算机断的软件实现单步、全速、运行到光标的常规调试手段。 图1:仿真器 总结一下两者的不同与相同: 相同点: 1:都可以检测单片机执行时序下的片内资源情况(如R0-R7 、PC计数器等) 2:可以实现断点、全速、单步、运行到光标等常规调试手段。 不同:

单片机调试

首先应该确认电源电压是否正常。用电压表测量接地引脚跟电源引脚之间的电压,看是否是电源电压,例如常用的5V。接下来就是检查复位引脚电压是否正常。分别测量按下复位按钮和放开复位按钮的电压值,看是否正确。然后再检查晶振是否起振了,一般用示波器来看晶振引脚的波形,注意应该使用示波器探头的“X10”档。另一个办法是测量复位状态下的IO口电平,按住复位键不放,然后测量IO口(没接外部上拉的P0口除外)的电压,看是否是高电平,如果不是高电平,则多半是因为晶振没有起振。另外还要注意的地方是,如果使用片内ROM的话(大部分情况下如此,现在已经很少有用外部扩ROM的了),一定要将EA引脚拉高,否则会出现程序乱跑的情况。有时用仿真器可以,而烧入片子不行,往往是因为EA引脚没拉高的缘故(当然,晶振没起振也是原因之一)。经过上面几点的检查,一般即可排除故障了。如果系统不稳定的话,有时是因为电源滤波不好导致的。在单片机的电源引脚跟地引脚之间接上一个0.1uF的电容会有所改善。如果电源没有滤波电容的话,则需要再接一个更大滤波电容,例如220uF的。遇到系统不稳定时,就可以并上电容试试(越靠近芯片越好)。 另外,调试系统时一定要有耐性,静下心来一点点的调,千万不要着急。 复位电路: 当MCS-5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST持续为高电平,单片机就处于循环复位状态。 根据应用的要求,复位操作通常有两种基本形式:上电复位和上电或开关复位。上电复位要求接通电源后,自动实现复位操作。常用的上电复位电路如下图A 中左图所示。图中电容C1和电阻R1对电源十5V来说构成微分电路。上电后,保持RST一段高电平时间,由于单片机内的等效电阻的作用,不用图中电阻R1,也能达到上电复位的操作功能 单片机复位后的状态: 单片机的复位操作使单片机进入初始化状态,其中包括使程序计数器PC= 0000H,这表明程序从0000H地址单元开始执行。单片机冷启动后,片内RAM为随机值,运行中的复位操作不改变片内RAM区中的内容,21个特殊功能寄存器复位后的状态为确定值,见下表。 值得指出的是,记住一些特殊功能寄存器复位后的主要状态,对于了解单片机的初态,减少应用程序中的韧始化部分是十分必要的。

3-2节 程序调试的方法

3-2节程序调试的方法 编程是一件需要认真和细心的工作。通过让学生从李明同学学习程序设计时所遇到的困难和他情感上所表现出来的“窘态”故事开始,道出程序调试不但需要技巧、更需要有耐心和毅力的道理,从而激发学生学习程序调试的兴趣和热情,拉开了本节的充幕。 接着,布置任务,让学生输入课本P83四段有错误的程序,要求学生自己探究,并改正程序。 最后分析程序运行的情况,总结出程序运行出错的四种类型: 一、拼写错误 1)在工程窗口中,看到红色文字显示的程序是有拼写错误的。 2)同时还要检查其它的拼写错误 Pring改为print Integr改为integer 2、编译时出现的错误 S应该改为a 3、运行时出现的错误 运行时的错误是指编译通过后,在执行程序时出现的错误,如用0作除数等。

例如:a=0的时候,将会出现0作除数的情形 4、逻辑错误 程序运行后,得出的结果不是正确的。这说明程序存在逻辑错误。逻辑错误产生 的原因很多,运算符使用不正确、语句次序不对、循环的设置不对等都可以产生 逻辑错误。 如这里的程序的出口应该是tree>=100 任务: P85 马上行动:

你和同学们能解决以上的问题吗?以合作、交流的方式大胆尝试一下,你会有意外的收获! 一、本节小结: 本节主要通过任务驱动、探究的形式,介绍了程序的错误类型,分析了产生错误的原因,程序的调试与排错的方法,让学生“从做中学”,进一步体验了程序调试的方法和技巧,培养了 学生调试程序的耐心和毅力,提高了学生程序设计的素养。 五、课外练习 编写一个程序,将从键盘输入的一个自然数进行因数分解,输出结果并上机验证。

C8051Fxx单片机开发工具及调试技术

关于开发工具及调试的技术问答 1、问:C8051FXX系列单片机的开发工具是不是串行适配器(PC机串口和JTAG协议转换适配)相同而目标版不同? 答:开发套件中串行适配器(核心部件)是通用的,只是目标版不同。只要您购买一套开发套件,就可以开发全系列单片机,只要将集成开发环境软件升级就可以了。为了加快您的开发进程,您只要购买带有相关型号单片机的目标板就可以了。 2、问:C8051F单片机是怎样调试用户系统的? 答:C8051F单片机是用开发套件来调试用户系统的。单片机开发套件包括开发软件IDE(集成开发环境),ML-EC3至PC机USB口和单片机JTAG接口的协议转换模块和一个目标板(板上有 C8051FMCU)。IDE中集成编译器,汇编器和连接器,支持汇编语言和C语言(第三方支持);ML-EC3是从USB口到JTAG协议的转换模块。 目标板上带有一块相应的C8051FMCU和一些简单的外围电路构成一个最小单片机系统,并将所有引脚连接到插座。C8051F单片机内集成了一个以JTAG协议为基础的调试电路,这样在调试您的系统时,不需要专用仿真芯片、目标仿真头及目标RAM等。您在IDE上编译生成程序代码后,通过ML-EC3(连接到计算机USB口和JTAG接口)将代码下载到用户系统板的C8051FMCU的Flash存储器中,然后您就可以调试您的目标系了。 3、问:可以用KeiluVision2IDE调试全系列C8051F单片机应用系统吗?

答:可以。但必须安装动态链接库。该驱动程序可以在我公司的网站上下载。 4、问:如何将绝对目标代码转换成hex格式文件? 答:第一,可以使用KEILC,在编译时直接生成。 第二,使用OH51(DOS命令)将目标文件转换成hex格式的文件。 Oh5Linputfile〔hexfile〕 第三,在IDE环境中生成HEX文件 ﹙1﹚.在TOOL菜单中选择ADDREMOVEUSERTOOL ﹙2﹚.点击ADD按钮,增加一个MENUTEXT(名称可以任何输入) ﹙3﹚.在TOOLS里选择OH51.EXE文件(此文件在KEIL的BIN目录中有,必须将此文件放在项目所在目录) ﹙4﹚.在ARGUMENTS里输入文件名或项目名 ﹙5﹚.在DIROF里输入HEX文件的保存目录 5、问:Silabs IDE中带有4K代码限制版的KeilC51,那么如何将无限制版的KeilC51嵌入到Silabs IDE中呢? 答:先将您完全版的KeilC51安装到您的PC机中;然后进入Silabs IDE界面,选择Project-﹥TOOLChainIntegration弹出对话框,单击Browse按钮,更换A51.EXE和BL51.EXE的路径(换成“Keil安装目录”/c51/bin)即可。 6、问:程序代码加密后,IDE不能与目标系统连接怎么办?

教你如何调节人声音色的调试技巧

教你如何调节人声音色的调试技巧 人声音色的调试技巧 1. 人声是一个复合音。也就是由声音的基音和一系列的泛音所构成。这些泛音都是基音频率的位数,物理学叫分音,电声学叫谐波,音乐中叫泛音。低频泛音的幅度较强,音色就表现得混厚;中频泛音的幅度比较强,音色就表现得圆润、自然、和谐;高频泛音的幅度比较强,音色就表现得明亮、清透、解析力强。 2. 如果高频段频率过弱,其音色就变得灰哑、缺少韵味、和个性;如果高频段频率过强,音色就会变得尖噪、刺耳。 如果中高频段的频率过弱,音色就变得暗淡、朦胧;如果中高频段的频率过强,其音色就会变得呆板。 3. 如果低频段的频率过弱,音色将会变得单薄、苍白;如果低频段的频率过强,音色会变得浑浊不清。 音响话筒怎样调节使用效果好! 调试篇 1.怎样调好话筒? 目前流行、通俗的演唱使用的动圈话筒音箱摆放尽量不要把话筒拾音区域覆盖进去。唱歌底气不足的加中高频,突出他的亮,底气很足的减低频,省得声音破掉,女人加低频声音厚,男人加高频声音透。 2.如何调音? ①设备的开、关机顺序 由音源设备(CD机、DVD机、)、音频处理设备(效果器、等)到功率放大器到电视机、投影机、。关机时顺序相反,应先关功放。这样操作可以防止开、关机对设备的冲击,防止烧毁功放和扬声器。 KTV音响声道系统三大的特点 声道系统的特点: 第一从声音效果上,能够使声音的密度感更好,声场更加宽阔,能够很好的营造出临场感和现场气氛,声场的密度感大大增加歌唱时倍感轻松, ◆第二从声压水平上来看,采用三只辅助音响能够使较小尺寸的音箱达到相同的声音量感和声压水平,这样更加便于我们进行箱体的安装,使其更好的溶入装修之中。同时在低频的表现上来看,多只小尺寸的扬声器的低频速度感比单只大口径扬声器单元更好,主观听感的冲击力和刺激感更加强烈,表现的声底将更干净,清晰。 第三从音箱运行安全性上,众所周知卡拉OK 音箱的扬声器是很容易损坏的,除了摔MIC,啸叫等

在Eclipse中使用debug(Eclipse调试常用技巧)

Eclipse调试常用技巧 发表时间:2010-04-06 最后修改:2010-11-26 记得刚刚毕业的时候,自己连断点也不会打,当时还在用JCreate,就连毕业设计也是用System.out找Bug的,想想真的很笨。开始工作后,一个星期过去了,在一个1、2百万行的系统中找Bug,我依然在用System.out,当时最痛苦的就是修改代码,每次找到疑似Bug,就输出一下,然后重启(那时也不知道代码热替换),直到有一天带我的导师发现了这样笨笨的调试Bug,才让我第一次认识了断点,也知道了代码修改完了可以进行热替换,我这个中国教育的半牺牲品才算向美好生活迈进了一小步。 1、条件断点 断点大家都比较熟悉,在Eclipse Java编辑区的行头双击就会得到一个断点,代码会运行到此处时停止。 条件断点,顾名思义就是一个有一定条件的断点,只有满足了用户设置的条件,代码才会在运行到断点处时停止。 在断点处点击鼠标右键,选择最后一个"Breakpoint Properties" 断点的属性界面及各个选项的意思如下图,

2、变量断点 断点不仅能打在语句上,变量也可以接受断点, 上图就是一个变量的打的断点,在变量的值初始化,或是变量值改变时可以停止,当然变量断点上也是可以加条件的,和上面的介绍的条件断点的设置是一样的。 3、方法断点 方法断点就是将断点打在方法的入口处, 方法断点的特别之处在于它可以打在JDK的源码里,由于JDK在编译时去掉了调试信息,所以普通断点是不能打到里面的,但是方法断点却可以,可以通过这种方法查看方法的调用栈。

4、改变变量值 代码停在了断点处,但是传过来的值不正确,如何修改一下变量值保证代码继续走正确的流程,或是说有一个异常分支老是进不去,能不能调试时改一下条件,看一下异常分支代码是否正确? 在Debug视图的Variables小窗口中,我们可以看到mDestJarName变量的值为" F:\Study\eclipsepro\JarDir\jarHelp.jar" 我们可以在变量上右键,选择"Change Value..."在弹出的对话框中修改变量的值, 或是在下面的值查看窗口中修改,保用Ctr+S保存后,变量值就会变成修改后的新值了。 5、重新调试 这种调试的回退不是万能的,只能在当前线程的栈帧中回退,也就说最多只能退回到当前线程的调用的开始处。 回退时,请在需要回退的线程方法上点右键,选择"Drop to Frame"

VB程序调试技巧

一,如果遇到了一些逻辑性很强的问题比如有循环什么的我的方法是在关键地方加入debug.print 变量 这样可以比较好地找到问题 二,msgbox 三,监视窗口,如下面的例子 For i=1 to 10000 A=sqr(i) next i 你想再监视当i=799时A的值,就可以添加监视,方法:点调试,添加监视,选择“当监视值为真时中断”,上面表达式框中写上i=799, 这样你按F5,运行程序,程序会在i=799时中断。其他选项你可以自己去琢磨一下。 一个程序如何顺利的“脱产”,调试的过程是非常重要的。学过、钻研过程序设计的人都有同样的感受,很多情况下,调试程序的过程会比程序编写的过程更为困难。任何一个天才都不敢说,他编的程序是100%正确的。几乎每一个稍微复杂一点的程序都必须经过反复的调试、修改,最终才完成。所以说,程序的调试是编程中的一项重要技术。 程序中的典型错误类型 A类:语法错误。 B类:编译错误。 C类:属性设置错误。 D类:逻辑错误。 调试方法 方法一:利用“MSDN帮助菜单” “MSDN帮助菜单”是一个很好的自学工具,对于出现调试对话框的菜单来说,可以按下“帮助”按钮查看错误原因。 对于一些不是很清楚的函数格式、保留字的作用,也可以借助“帮助菜单”。 方法二:逐过程检查 主要检查代码是否写对,位置有没有错误,关键是要确定一段代码是在哪个事件控制下的。不妨先在脑海中把整个程序过一边,想一想究竟会有哪些事件发生(有些事件是人机互动的,例如:鼠标点击;而有些是机器自己执行的,这时要想到计时器的作用);然后想一想每一件事发生后有什么效果。我们代码所编写的一般就是事件发生后的这个效果,那么以此事件来决定代码所写的位置。 方法三:逐语句检查(顺序、语义) 主要检查每一句代码的顺序是否写对,语义是否正确。 把整个代码从头至尾地读一边,仔细思索每一段子过程什么时候执行,以及每一子过程中的每一句代码什么时候发生,必要时可以在程序段中插入Print语句分段查看;也可用注释语

单片机系统焊接及调试1

一、对STC89C52单片机的介绍 AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。 STC89系列单片机大部分具有系统可编程(ISP)特性,ISP的好处是:省去购买通用编程器,单片机在用户系统上即可下载/烧录用户程序,而无须将单片机从以生产好的产品上拆下,再用通用编程器将程序代码烧录进单片机内部。有些程序尚未定型的产品可以一边生产,一边完善,加快了产品进入市场的速度,减小了新产品由于软件缺陷带来的风险。由于可以直接将程序下载进单片机看运行结果故也可以不用仿真器。 最小系统焊接材料 焊接材料 元器件清单: 序号 器件 数量 1 1μF电容 5

2 15PF电容 2 3 4.7μF电容 1 4 POWER LED 1 5 RS232串口 1 6 USB串口 1 7 POWER 1 8 HEADER 20排针 1 9 2K电阻 1 10 10K电阻 1 11 A103J排组 1 12 POWER KEY开关 1 13 RESET按键 1 14 MAX232CPE芯片 1 15 STC89C52RC芯片 1 16 12M晶振 1 17 STC89C52RC 插槽 1 18 MAX232CPE 插槽 1 19 印刷电路板 1 20 LED 红绿黄 8 21 按键 1 二、烙铁使用的注意事项 (1) 新买的烙铁在使用之前必须先给它蘸上一层锡。通电加热升温,

C++编程中的四个调试小技巧

C++编程中的四个调试小技巧 1.调试标记 适用预处理#define定义一个或多个调试标记,在代码中把调试部分使用#ifdef 和#endif 进行管理。当程序最终调试完成后,只需要使用#undef标记,调试代码就会消失。常用的调试标记为DEBUG, 语句序列: #define DEBUG #ifdef DEBUG 调试代码 #endif 2.运行期间调试标记 在程序运行期间打开和关闭调试标记。通过设置一个调试bool标记可以实现。这对命令行运行的程序更为方便。 例如下面代码 #include<iostream> #include <string> using namespace std; bool debug =false; int main(int argc,char*argv[]) { for(int i=0;i<argc;i++) if(string(argv[i])=="--debug=on") debug = true; bool go=true; while(go) { if(debug) {

调试代码 }else {} } } 3.把变量和表达式转换成字符串 可是使用字符串运算符来实现转换输出定义 #define PR(x) cout<<#x"="<<x<<'\n' 4.c语言的assert() 该宏在<assert>中,,当使用assert时候,给他个参数,即一个判读为真的表达式。预处理器产生测试该断言的代码,如果断言不为真,则发出一个错误信息告诉断言是什么以及它失败一会,程序会终止。 #include< assert> using namsapce std; int main() { int i=100; assert(i!=100); //Fails } 当调试完毕后在#include<assert>前加入#define NDEBUG即可消除红产生的代码 }

调试程序的简单说明.

难怪很多前辈说调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。 我以前接触的程序大多是有比较成形的思路和方法,调试起来出的问题都比较小,最近这个是我自己慢慢摸索调试,接触了很多新的调试方法,并查了很多前辈的总结,受益匪浅,总结以前的和新的收获如下: VC 调试篇 设置 为了调试一个程序,首先必须使程序中包含调试信息。一般情况下,一个从AppWizard 创建的工程中包含的Debug Configuration 自动包含调试信息,但是是不是Debug 版本并不是程序包含调试信息的决定因素,程序设计者可以在任意的Configuration 中增加调试信息,包括Release 版本。 为了增加调试信息,可以按照下述步骤进行: ? 打开Project settings 对话框(可以通过快捷键ALT+F7打开,也可以通过IDE 菜单Project/Settings 打开 ?选择C/C++页,Category 中选择general ,则出现一个Debug Info 下拉列表框,可供选择的调试信息方式包括: 命令行 Project settings 说明 无 None 没有调试信息 /Zd Line Numbers Only 目标文件或者可执行文件中只包含全局和导出符号以及代码行信息,不包含符号调试信息

/Z7 C 7.0- Compatible 目标文件或者可执行文件中包含行号和所有符号调试信息,包括变量名及类型,函数及原型等 /Zi Program Database 创建一个程序库(PDB,包括类型信息和符号调试信息。 /ZI Program Database for Edit and Continue 除了前面/Zi 的功能外,这个选项允许对代码进行调试过程中的修改和继续执行。这个选项同时使 #pragma 设置的优化功能无效 ? 选择Link 页,选中复选框"Generate Debug Info",这个选项将使连接器把调试信息写进可执行文件和DLL ?如果C/C++页中设置了Program Database 以上的选项,则Link incrementally 可以选择。选中这个选项,将使程序可以在上一次编译的基础上被编译(即增量编译,而不必每次都从头开始编译。调试方法: 1、使用 Assert(原则:尽量简单assert只在debug下生效,release下不会被编译。 2、防御性的编程 3、使用Trace 4、用GetLastError来检测返回值,通过得到错误代码来分析错误原因 5、把错误信息记录到文件中 位置断点(Location Breakpoint 大家最常用的断点是普通的位置断点,在源程序的某一行按F9就设置了一个位置断点。但对于很多问题,这种朴素的断点作用有限。譬如下面这段代码:

PLC程序现场调试的方法

P L C程序现场调试的方法 Prepared on 24 November 2020

PLC程序现场调试的方法——【非常重要】 02-04 16:42更新林慧玲分类:围观:625人次微信二维码 1、要查接线、核对地址 要逐点进行,要确保正确无误。可不带电核对,那就是查线,较麻烦。也可带电查,加上信号后,看电控系统的动作情况是否符合设计的目的。 2、检查模拟量输入输出 看输入输出模块是否正确,工作是否正常。必要时,还可用标准仪器检查输入输出的精度。 3、检查与测试指示灯 控制面板上如有指示灯,应先对应指示灯的显示进行检查。一方面,查看灯坏了没有,另一方面检查逻辑关系是否正确。指示灯是反映系统工作的一面镜子,先调好它,将对进一步调试提供方便。 4、检查手动动作及手动控制逻辑关系 完成了以上调试,继而可进行手动动作及手动控制逻辑关系调试。要查看各个手动控制的输出点,是否有相应的输出以及与输出对应的动作,然后再看,各个手动控制是否能够实现。如有问题,立即解决。 5、半自动工作 如系统可自动工作,那先调半自动工作能否实现。调试时可一步步推进。直至完成整个控制周期。哪个步骤或环节出现问题,就着手解决哪个步骤或环节的问题。 6、自动工作 在完成半自动调试后,可进一步调试自动工作。要多观察几个工作循环,以确保系统能正确无误地连续工作。 7、模拟量调试、参数确定 以上调试的都是逻辑控制的项目。这是系统调试时,首先要调通的。这些调试基本完成后,可着手调试模拟量、脉冲量控制。最主要的是选定合适控制参数。一般讲,这个过程是比较长的。要耐心调,参数也要作多种选择,再从中

选出最优者。有的PLC,它的PID参数可通过自整定获得。但这个自整定过程,也是需要相当的时间才能完成的。 8、完成上述所有的步骤 整个调试基本算是完成了。但最好再进行一些异常条件检查。看看出现异常情况或一些难以避免的非法操作,是否会停机保护或是报警提示。进行异常检查时,一定要充分考虑到设备与人身的安全! 整个调试基本算是完成了。但最好再进行一些异常条件检查。看看出现异常情况或一些难以避免的非法操作,是否会停机保护或是报警提示。进行异常检查时,一定要充分考虑到设备与人身的安全!

单片机原理keil使用教程

keil教程 Keil 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和C 语言的程序设计,界面友好,易学易用。下面介绍Keil软件的使用方法,这应该算一个入门教程,进入Keil 后,屏幕如下图所示。几秒钟后出现编辑界 启动Keil uVision4时的屏幕。

简单程序的调试学习程序设计语言、学习某种程序软件,最好的方法是直接操作实践。下面通过简单的编程、调试,引导大家学习Keil C51软件的基本使用方法和基本的调试技巧。 1) 对于单片机程序来说,每个功能程序,都必须要有一个配套的工程(Project),即使是点亮LED这样简单的功能程序也不例外,因此我们首先要新建一个工程,打开我们的Keil软件后,点击:Project-->New uVision Project...然后会出现一个新建工程的界面,如图2-8所示。 2)因为是第一个实验,所以我们在硬盘上建立了一个实验1 的目录,然后把LED这个工程的路径指定到这里,这样方便今后管理程序,不同的功能程序放到不同的文件夹下,并且给这个工程起一个名字叫做LED,软件会自动添加扩展名LED.uvproj。如图2-9所示。 下次要打开LED这个工程时,可以直接找到文件夹,双击这个.uvproj 文件就可以直接打开了。

图2-9 保存工程 3)保存之后会弹出一个对话框,这个对话框让我们选择单片机型号。因为Keil软件是外国人开发的,所以我们国内的STC89C52RC并没有上榜,但是只要选择同类型号就可以了。Keil 几乎支持所有的51核的单片机,这里还是以大家用的比较多的Atmel 的AT89S51来说明,如下图2-10、图2-11所示,选择AT89S51之后,右边栏是对这个单片机的基本的 说明,然后点击确定。

单片机程序案例(全部调试通过_部分附仿真图)

这是大三上学期学单片机做的所有实验题,是全部编程试验箱通过的。总结下,记得条条大道通罗马,不要拘泥于一种方式,仅供参考呀~~~ 实验一单片机实验设备的使用及简单程序的运行、调试 一、实验目的 通过一简单的实验掌握: 1. 掌握PL2303驱动的安装,掌握Keil3开发环境的安装、设置和基本使用; 2. 掌握项目、文件的建立方法、程序的下载以及寄存器、存储器内容的查看方法; 3. 掌握程序的执行及断点设置方法。 二、实验设备 单片机实验箱一台;PC机一台;USB下载线一根。 三、实验内容 通过了解P1口的开关控制电路和P0的LED电路,编写基本输入输出实验程序。实验内容为设置P1为输入口,P0口为输出口,将P1口的开关状态发送到P0口,让灯亮灭,将P1的电平状态通过P0口的LED的亮灭表示出来。 四、实验步骤 读懂电路原理图如图1-1和图1-2所示:,插上USB连接线,将电源选择拨码开关拨至“USB供电”,将示例程序进行编译、装载、下载,下载时将拨码开关S44拨至“开”状态,拨动拨码开关S31~S38的开关状态,观察实验现象,实验电路原理图 图1-1 LED接口电路

图1-2 拨码开关电路图 五、示例程序 程序清单如下: #include void main(void) // 程序主函数 { while(1) // 循环用于实时扫描IO状态 { P0=P1; // 将P1口的数据发送给P0口 } } 六、实验注意事项 1.在输入程序时,其中的字母、符号均须在英文方式下进行。 2.特殊功能寄存器中的字母必须要大写,如若将示例程序中的P0写成p0,程序将提示出错。 实验二流水灯实验 一、实验目的 1、掌握单片机实验箱的使用方法与程序调试技巧; 2、学会使用51系列单片机I/O的基本输入输出功能。 二、实验设备

单片机 简单程序调试

简单程序调试4 4 简单程序调试

算法 ?算法是一个良定义的计算过程,所谓良定义是指: 算法是个的计算过程所谓良定义是指 ?算法应当是正确的。因为错误的算法不能达到预期的 工作目的。 ?算法应当是有穷的。即一个算法的步骤应当是有限的, 的即一个算法的步骤应当是有限的 同时一个算法所运行的时间也应当是有限的。 ?算法应当是有效的。即一个算法所对应的计算机程序 运行后应当输出有效的运行结果,没有效果的算法是运行后应当输出有效的运行结果没有效果的算法是 没有实际意义的。

常用流程符号 起止框输入输出框处理框判断框流程线 连接点

数 例:设在内部RAM中从50H—60H中存放一组数,试编程找出其中最大数并将该数送2FH,试设计相应算法(绘制流程图)并编写程序。 需考虑的问题: ?如何进行“数的比较”?肉眼观察? ?如何找出最大数?只能进行两个地址中数据的比较 17个数,比较16次 ?需要比较多少次? ?用什么指令进行比较? ?如何往RAM中置数? 38H,93H,87H,A7H,B9H,35H,62H A51H52H53H54H55H56H…

控制转移指令 比较是否相等的跳转指令JC rel 判断CY状态的跳转指令 CJNE A,direct,rel CJNE A,#data,rel JC rel ?若CY=1,跳转,否则向下执行JNC l CJNE Rn,#data,rel CJNE @Ri #d t l JNC rel ?若CY=0,跳转,否则向下执行CJNE @Ri,#data,rel ?(A)<(direct),CY=1 DJNZ Rn,rel 减1不为零的跳转指令若()(d ect),则C DJNZ direct,rel

投影设置小窍门-投影机最简单调试方法

投影设置小窍门-投影机最简单调试方法

投影设置小窍门投影机最简单调试方法 随着高清影音时代到来,包括大屏幕电视、显示器在内的显示产品持续热销,其中就连消费者以前很少接触的家用投影机也变得好卖了许多。不过,相比传统的家电产品,投影机无论在安装还是调试方面都要复杂不少。 作为一种精密的光学设备,投影机的使用方法与许多家电产品有所不同,在使用之中,有不少注意事项需要提前阅读。今天,小编主要介绍一些投影机菜单中的主要功能与调试方法,希望对于刚刚接触投影及的新手带来一些帮助。 画面颠倒怎么办?投影方式需设置正确 在日常使用中,投影机最常见的安装方式无外乎吊装与正投两种。但是,由于每款投影机的镜头规格不同,其产品在投影距离与投射角度上存在差异,因此在购买或安装投影机前,要根据说明书中的投射距离参数计算安装位置。 一些高端产品具备镜头位移功能 点击此处查看全部新闻图片

在一些中高端家用投影机中,用户可以通过镜头位移功能调整画面位置,而且画面质量不会降低。通过这一功能,投影机的安装范围大幅扩大,能够安置在沙发一旁的边桌或者专业器材架上,特别适合不便于吊装投影机的家庭。当然,这些具备位移功能的产品,售价要更贵一些。 投影方式确保设置正确 点击此处查看全部新闻图片 无论投影机采用吊装还是正投,首先要在菜单中选择相应的投影方式,才能获得方向正确的显示画面。否则,可能会出现画面颠倒的情况,此时调整投影方式即可解决。 画面变形咋办?尝试使用梯形校正功能 与安装显示器、平板电视相似,投影机同样不能放在不平稳的表面或架子上,最好能够水平放置,此时投影画面最清晰,且不会出现梯形畸变。如果需要向上投影时,投影机倾斜角度不应超过15度,否则将会影响投影机的使用寿命。

PLC程序调试方法及步骤

来源:中国物资采购网时间:2010年5月6日11时20分【大中小】PLC程序的调试可以分为模拟调试和现场调试两个调试过程,在此之前首先对PLC外部接线作仔细检查,这一个环节很重要。外部接线一定要准确无误。也可以用事先编写好的试验程序对外部接线做扫描通电检查来查找接线故障。不过,为了安全考虑,最好将主电路断开。当确认接线无误后再连接主电路,将模拟调试好的程序送入用户存储器进行调试,直到各部分的功能都正常,并能协调一致地完成整体的控制功能为止。 1.程序的模拟调试 将设计好的程序写入PLC后,首先逐条仔细检查,并改正写入时出现的错误。用户程序一般先在实验室模拟调试,实际的输入信号可以用钮子开关和按钮来模拟,各输出量的通/断状态用PLC上有关的发光二极管来显示,一般不用接PLC实际的负载(如接触器、电磁阀等)。可以根据功能表图,在适当的时候用开关或按钮来模拟实际的反馈信号,如限位开关触点的接通和断开。对于顺序控制程序,调试程序的主要任务是检查程序的运行是否符合功能表图的规定,即在某一转换条件实现时,是否发生步的活动状态的正确变化,即该转换所有的前级步是否变为不活动步,所有的后续步是否变为活动步,以及各步被驱动的负载是否发生相应的变化。 在调试时应充分考虑各种可能的情况,对系统各种不同的工作方式、有选择序列的功能表图中的每一条支路、各种可能的进展路线,都应逐一检查,不能遗漏。发现问题后应及时修改梯形图和PLC中的程序,直到在各种可能的情况下输入量与输出量之间的关系完全符合要求。 如果程序中某些定时器或计数器的设定值过大,为了缩短调试时间,可以在调试时将它们减小,模拟调试结束后再写入它们的实际设定值。 在设计和模拟调试程序的同时,可以设计、制作控制台或控制柜,PLC之外的其他硬件的安装、接线工作也可以同时进行。 2.程序的现场调试 完成上述的工作后,将PLC安装在控制现场进行联机总调试,在调试过程中将暴露出系统中可能存在的传感器、执行器和硬接线等方面的问题,以及PLC的外部接线图和梯形图程序设计中的问题,应对出现的问题及时加以解决。如果调试达不到指标要求,则对相应硬件和软件部分作适当调整,通常只需要修改程序就可能达到调整的目的。全部调试通过后,经过一段时间的考验,系统就可以投入实际的运行了。 本文来自: 中国物资采购网https://www.wendangku.net/doc/f016461770.html, 详细出处参考:https://www.wendangku.net/doc/f016461770.html,/newsinfo/2010-5-6/201056-11200321719338297.html PLC程序现场调试指在工业现场,甩有设备都安装好后,所有连接线都接好后的实际调试。也是PLC程序的最后调试。现场调试的目的是,调试通过后,可交给用户使用,或试运行。现场调试参与的人员较多,要组织好,要有调试大纲。依大纲,按部就班地一步步推进。开始调试时,设备可先不运转,甚至了不要带电。可随着调试的进展逐步加电、开机、加载,直到按额定条件运转。具体过程大体是: 1)、要查接线、核对地址。要逐点进行,要确保正确无误。可不带电核对,那就是查线,较麻烦。也可带电查,加上信号后,看电控系统的动作情况是否符合设计的目的。 2)、检查模拟量输入输出。看输入输出模块是否正确,工作是否正常。必要时,还可用标准仪器检查输入输出的精度。 3)、检查与测试指示灯。控制面板上如有指示灯,应先对应指示灯的显示进行检查。一方面,查看灯坏了没有,另一方面检查逻辑关系是否正确。指示灯是反映系统工作的一面镜子,先调好它,将对进一步调试提供方便。 4)、检查手动动作及手动控制逻辑关系。完成了以上调试,继而可进行手动动作及手动

单片机开发过程中硬件调试技巧

单片机开发过程中硬件调试技巧 在单片机开发过程中,从硬件设计到软件设计几乎是开发者针对本系统特点亲自完成的。这样虽然可以降低系统成本,提高系统的适应性,但是每个系统的调试占去了总开发时间的2/3,可见调试的工作量比较大。单片机系统的硬件调试和软件调试是不能分开的,许多硬件错误是在软件调试中被发现和纠正的。但通常是先排除明显的硬件故障以后,再和软件结合起来调试以进一步排除故障。可见硬件的调试是基础,如果硬件调试不通过,软件设计则是无从做起。本文结合作者在单片机开发过程中体会,讨论硬件调试的技巧。 当硬件设计从布线到焊接安装完成之后,就开始进入硬件调试阶段,调试大体分为以下几步。 1 硬件静态的调试 1.1排除逻辑故障 这类故障往往由于设计和加工制板过程中工艺性错误所造成的。主要包括错线、开路、短路。排除的方法是首先将加工的印制板认真对照原理图,看两者是否一致。应特别注意电源系统检查,以防止电源短路和极性错误,并重点检查系统总线(地址总线、数据总线和控制总线)是否存在相互之间短路或与其它信号线路短路。必要时利用数字万用表的短路测试功能,可以缩短排错时间。 1.2排除元器件失效 造成这类错误的原因有两个:一个是元器件买来时就已坏了;另一个是由于安装错误,造成器件烧坏。可以采取检查元器件与设计要求的型号、规格和安装是否一致。在保证安装无误后,用替换方法排除错误。 1.3排除电源故障 在通电前,一定要检查电源电压的幅值和极性,否则很容易造成集成块损坏。加电后检查各插件上引脚的电位,一般先检查VCC与GND之间电位,若在5V~4.8V之间属正常。若有高压,联机仿真器调试时,将会损坏仿真器等,有时会使应用系统中的集成块发热损

相关文档