高级语言在单片机设计中的应用.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
高级语言在单片机设计中的应用

程序调试时的一些小技巧 C语言程序调试技巧 前言 调试程序,是软件开发过程中的一个必不可少的环节。这篇讲义,主要是跟大家分享一下我调试的一些小技巧。 这里所讨论的“调试”技巧,有些是必须结合开发工具本身的功能来实现,而有些可以通过烧录芯片来验证。 各种开发工具,提供的功能多少强弱也不尽相同,这些方法也未必都能套用。仅供参考吧。 磨刀不误砍柴功 在调试之前,需要掌握以下一些基本功: 1、熟悉当前的开发(调试)环境,比如:设置断点、单步运行、全速运行、终止运行,查看 RAM、查看堆栈、查看IO口状态……总之,要熟练掌握基本操作的方法,并深刻了解其中意 义。 2、了解芯片本身的资源和特性。 3、了解一点汇编语言的知识。 4、掌握基本的电路知识和排错能力。(软件调试有时也会牵涉到硬件原因。总不能连三极管 的好坏都不能识别吧?) 5、万用表、示波器、信号发生器……这些工具总要会用的 6、搜索、鉴别资料的能力。(内事问百度、外事问谷歌、有事没事上21ic网) 7、与人沟通,描述问题的能力。(调试36计的最后一计——就是向他人讨教。尤其是我们现 在可以直接询问我们的芯片代理商,这使得我们解决问题更加便捷。当然,你得把话说明白才 行) 差不多了,如果上述7把砍柴刀磨好了,就可以开始调试了。接下来,请调试你的程序…… 优先调试人机界面 面对程序中的一大堆模块,有些人可能会无从下手,好吧,我来告诉你,先调显示模块,然后是键盘。 为什么要先调显示模块?道理很简单,我们说“眼睛是心灵的窗户”,同样,“显示是程序的窗户”。一旦把显示模块调试好了,就可以通过这个窗口,观察 程序内部的数据和状态了。 然后紧接着,就是调试键盘模块。有了这个按键,我们就可以人工干预程序的运行了。 如果没有显示或者按键,再看看系统有蜂鸣器吗?如果侥幸有的话,也能凑合着用提示音来调试。 或者,有串口吗?可以考虑借助PC 端的串口调试软件来收发数据,这也是一个间接的人机交流方法。 慢镜头的威力 我们知道,单片机的运行速度,一般都是在几M到几十M(当然,也有为了节能而采用几十K的低速)。不管怎么样,这个速度都远远超出了我们人眼能够分辨的速度。眼睛一眨,也许几M条指令已经执行过去了。 比如说数码管显示(假设有4位数码管)。平时我们看到数码管同时点亮着,但是实际上,这4个数码管是逐个扫描的。在任意一个时刻,只有一位数码管被点亮。在微观上,我们可以进一步把每位数码管的扫描动作细分为以下几个步骤: 1、关闭上一位数码管的位选信号; 2、输出当前位数码管的段选信号; 3、开启当前位数码管的位选信号; 4、启动1ms延时; 5、延时结束后,指针移动到下一位数码管,并重复上述4个步骤,如此周而复始。 你看,这样是不是就像用一个慢镜头在分解显示扫描的动作了? 那么如何实现这个慢镜头呢?方法很多: 1、单步运行(需要仿真器支持); 2、在每一步分动作之后设立断点(需要仿真器支持); 3、在每一步分动作之后插入足够的延时,让我们肉眼可以看清楚这些分动作(不需要仿真器,适合烧片测试); 通过慢镜头的反复回放,我们就可以发现,到底是哪一个分动作出现了问题。 这个技巧,不仅仅适用于调试显示程序,也适用于按键扫描或其它模块。只要一个功能可以被细分为若干的动作,那么这一招“慢镜头分解法”都是可以使用的。 给程序安装个黑匣子 我们在调试程序时,可以给程序安装一个黑匣子。程序中的黑匣子其实就是一个在内存中开辟的队列。队列的原理我们很清楚,先进先出,后进后出。 比如说吧,假设我们的系统在工作中,某个输入量的采样值经常受到不明原因的扰动。我们要摸清这种扰动的规律,以便对症下药。但是这种扰动稍纵即逝。 我们的困扰是:程序正常运行时看不出规律,单步走又难以捕捉扰动。怎么办? 有没有办法,把扰动记录下来? 当然可以。 我们可以利用系统里剩余的RAM,开辟一块单元,做成队列。并写段测试程序,定时把新采样值压入队列。 然后我们让程序运行,在需要的(任意)时刻,让程序停下来。这时,队列里记录的就是最新一批采样数据。 只要队列的深度足够大,我们就可以找出扰动的规律来。 在程序中设卡伏击 对于一个未经调试的不成熟的程序来说,导致PC指针跑飞的因素很多,我们逐条列举并分析之: 1、电磁干扰(如果不是在现场,那么这一条可以暂时不考虑。因为在调试环境下一般不会有干扰); 2、程序结构错乱(喜欢用jmp或goto类指令的尤其要注意这点); 3、堆栈溢出或错乱,导致PC指针出错; 4、PC指针被错误改写(有些芯片PC指针存储单元和其它RAM单元的访问方法是一样的,很容易被误写); 5、数据错误,导致程序没有按照预期

文档评论(0)

170****0571 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档