单片机程序调试黑皮书

发布者:alpha12最新更新时间:2012-08-06 来源: 51hei关键字:单片机  程序调试  中断 手机看文章 扫描二维码
随时随地手机看文章

1、程序的确定性比硬件大,不要害怕程序问题。
2、写程序,最重要的不是学会某种语言,而是会分析问题并提出解决问题的方法。
3、含有中断的程序较为复杂,需要编写者清楚同一时刻,我在做什么,其他人在做什么,用“并发”的方式思考问题,才能写好。
4、程序模块化是为了编写而不是为了运行,模块化和函数是两个不同的概念,函数是为了将需要多次使用的代码统一编写,以便减少程序代码量,便于维护;模块化是指将复杂的程序功能化整为零而成的功能块,一个模块可能由多个函数组成,也可能就是一个函数,还有可能只是一段紧密相连的代码块。
模块---打开冰箱门
1、抬起右手,移动到冰箱门把中心右侧1cm处
2、弯曲右手手指,构筑冰箱门
3、以2kg的力量向后拉
4、完成
5、好的模块化设计,模块间的接口简单明了。总的来说,好看好改的程序就是好程序。
6、编写程序的好习惯是分模块编写,边写边测试,在通过测试的模块基础上编写下一个模块,可以减少程序出现问题的可能性,快速排除与问题相关的模块并定位到程序语句。
7、注释不是程序,但可以帮助编写者提高边写的可能性,也可以大大提高程序的可维护性。建议C语言程序注释到函数,一些重要的操作至少要注释;汇编语言程序,至少注释70%的语句行,建议一行一注。
8、程序有BUG是很正常的,要学会找BUG的方法。
9、故障分软硬,软故障最难找。软故障多源于设计临界所导致,在一定出发条件下发生,当条件破坏时,故障可能消失得无影无踪。
软故障的误导性来源于对硬故障的经验积累。硬故障因为无需出发条件,人们往往用
尝试---判断--再尝试
10、单片机软件和硬件密不可分,查找问题时要两者兵种,不可死认一方。
11、Debug高手和新手间的区别,高手知道该如何去找,而新手会迷茫。
12、平时就要注意积累。学习软硬件只是,还要熟悉自己的实际应用,包括应用条件,否则会对放在面前,对推理极有价值的关键现象视而不见。找BUG可以用“猜” 的方法,但是“猜”完了要推理到所有的现象上去“验证”。所以我们说“怀疑---否定---再怀疑---再否定,直到找到真理所在”,前面的“尝试--- 判断---再尝试”是找BUG的基本方法。
13、在BUG面前,新手和高手初始化状态是一样的,只是高手有意识去找现象用于分析,新手看着现象发呆罢了。
14、论据有两种获得方式---寻找和傻等,高手以寻找为主,新手以傻等为主。
15、随机对随机的方式是一种在查找小概率软故障时用得极端确认方法,需要使用者对故障的基本特征熟练掌握,明确“小概率事件很少发生”的原理。
16、当一个系统由若干个部分组成时,寻找故障的时候可以将怀疑引起故障的部分更换到其他系统上,通过观察故障现象是否随该部分迁移来判断BUG所在。
17、将精力集中在需要查找的部分,排除其他模块的影响,用最简单的方法去判断,这就是模块隔离法的价值所在。
18、发生时间相关性BUG,其分开测试正确,合并测试出错的特性往往让初学者抓狂,在调试含有中断的程序时,一定要多条思路,怀疑程序的时间相关性。
19、因为只有在实际运行时才会表现出来,时间相关性BUG比较难于查找,这也就是我们建议程序在实际环境中调试,而不是仿真环境下调试的原因之一,遵守基本规则编写程序是避免时间相关性BUG说呢之所有BUG的根源。多观察现象,积累判断依据是找时间相关性BUG的法宝。

以上为单片机教程网http://www.51hei.com 站长huqin在多年程序开发中总结的一些经验,虽然写程序很累,只要我们不断的积累经验不断的学习,乐趣自然在其中,当我们开发成功一个产品我想得到的不仅仅是一个产品,还有自豪和满足吧.程序员是一个有激情的工作,希望我们都能继续写下去.

关键字:单片机  程序调试  中断 引用地址:单片机程序调试黑皮书

上一篇:浅谈如何按键消抖
下一篇:spi四种模式io模拟时序

推荐阅读最新更新时间:2024-03-16 13:05

【51单片机】利用烧录软件生成延时函数 入门学习
1.打开烧录软件 2.(1)找到延时计算器 (2)选择晶振(11.0592和12Mhz的情况下建议都选择12Mhz) (3)选择时间单位us 或者 ms 3、 (1)选择STC-Y1(该系列适用51单片机系列,具体看图中2) (2)生成代码 (3)复制代码到keil 4. 生成的代码并不能直接使用,还需要加上以下几句话 下文中延时时间的是Delay(1)=1ms 下图中可以看到,程序从19走到21,延时0.10080200s,误差几乎忽略不计。对于精度要求不高的延时计算已经够用了。 同时也能通过更改i,j的值进行微调。
[单片机]
【51<font color='red'>单片机</font>】利用烧录软件生成延时函数 入门学习
IAR Systems发布支持Freescale ColdFire架构的开发工具
全球领先的嵌入式开发工具供应商IAR Systems,日前发布支持Freescale ColdFire MCU架构的开发工具套件—IAR YellowSuite。嵌入式开发人员可以在基于V1和V2内核的ColdFire系列芯片上使用这套开发工具。IAR Systems还计划在2008年第一季度推出支持Freescale S08 8位芯片的开发套件。 Freescale消费与工业微控制器部门的全球产品经理Jeff Bock说:“IAR YellowSuite for ColdFire为设计者建立基于ColdFire V1和V2内核的嵌入式系统提供了一个强大的开发工具。我们与IAR Systems公司的合作也说明开发人员在使用先进的
[嵌入式]
单片机用作通用红外遥控接收器的设计
红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰 。 1 红外遥控系统 通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图1所示。发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。 2 遥控发射器及其编码 遥控发射器专用芯片很多,现以日本NEC的UPD6121G.ht
[单片机]
<font color='red'>单片机</font>用作通用红外遥控接收器的设计
单片机进制转换
  一、正数   在高速发展的现代社会,计算机浩浩荡荡地成为了人们生活中不可缺少的一部分,帮助人们解决通信,联络,互动等各方面的问题。今天我就给大家讲讲与计算机有关的“进制转换”问题。   我们以(25.625)(十)为例讲解一下进制之间的转化问题。 1. 十 ----- 二   给你一个十进制,比如:6,如果将它转换成二进制数呢?   10进制数转换成二进制数,这是一个连续除2的过程:   把要转换的数,除以2,得到商和余数,   将商继续除以2,直到商为0。最后将所有余数倒序排列,得到数就是转换结果。   听起来有些糊涂?我们结合例子来说明。比如要转换6为二进制数。   “把要转换的数,除以2,得到商
[单片机]
基于AVR单片机的18B20温度传感器及LCD显示的C语言程序设计
***************************************************/ #include iom16v.h #include macros.h #define uchar unsigned char #define uint unsigned int #include 1602LCD_drive.h //包含LCD驱动程序软件包 #include DS18B20_drive.h //DS18B20驱动程序软件包 #define beep_0 (PORTD=PORTD&0xbf) //PD6上的蜂鸣器发声 #define beep_1 (PORTD=PORTD|0x40) //PD6上的蜂鸣器
[单片机]
MCU-ISP和ICP的区别
对Flash-based的MCU来说, ISP和ICP几乎是不可或缺的功能, 但我们经常被这两个功能搞混, 究竟他们的差别在哪里? 对客户的意义又是什么?在这里, 和大家分享并澄清一些观念, 希望对大家有所帮助, 进而解答来自客户关于ISP与ICP的疑问. 1)在开发阶段 改code时, 不再需要将MCU从板子上拔起来, 拿到烧录器上烧, 然后再装回去. 可以直接利用ISP/ICP Programmer做板上烧录, 为开发者提供了极大的便利性. 2)在量产阶段 客户可以采用 先焊到板子上再烧code 的方式, 将烧code的动作安排在生产线的某一站. 那么传统的方式 (先将code烧好再焊到板子上)有
[单片机]
基于单片机的通用测试仪的设计与实现
1 引言 在许多工业控制和数据采集系统中,为了实现系统的小型化和便携化,通常采用上下位机形式的主从式结构。 由于MCU(微控制器)成本低,编程灵活、方便,实时性强,且具有一定的智能,因而通常使用它作为下位机的主控芯片,负责对现场数据的采集与传输,并控制相应的执行机构。上位机一般使用普通的PC机、笔记本电脑或工控机,负责对下位机传来的数据进行分析处理, 并根据处理结果控制下位机的操作。上下位机之间的数据通信接口目前一般使用RS-232和USB总线接口标准,相对于RS-232,USB 具有高速传输、热插拔、即插即用等优点。在本系统中,为了保证下位机高速采样数据能及时传送给上位机进行分析处理,我们采用USB总线来实现上下位机的数据
[单片机]
基于<font color='red'>单片机</font>的通用测试仪的设计与实现
什么是中断 stm32中断服务函数
中断概念: 中断是指在计算机执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的时间处理程序。待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。 中断作用: 计算机与外设之间的联系一般通过两种方法:一是通过CPU控制来进行数据的传送;二是在专门的芯片控制下进行数据的传送。我们所说的DMA,就是不用CPU控制,外设同内存之间相互传送数据的通道,在这种方式下,外设利用DMA通道直接将数据写入存储器或将数据从存储器中读出,而不用CPU参与,系统的速度会大大增加。 你打开stm32的启动文件,例如startup_stm32f10x_hd.s 里面有很多中断跳转的
[单片机]
热门资源推荐
热门放大器推荐
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved