程序调试黑宝书.pdf
《程序调试黑宝书.pdf》由会员分享,可在线阅读,更多相关《程序调试黑宝书.pdf(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 单片机程序调试黑宝书单片机程序调试黑宝书 一、一、前言:前言:1.1 你离高手有多远?首先我必须放下架子,因为本文的读者中很大一部分在不久的将来都会超越我。而且我也 100%不能自诩为高手,我不过是比本文的部分读者碰的钉子多些罢了。再退一步讲,即使你请了一位“高手”帮忙,如果他不是对你的具体系统十分了解,也只能给你一些原则上的建议罢了。结论:没有绝对的高手,高手是积累出来的,程序调试靠自己。1.2 谁应该读这篇文章?我们经常在论坛看到类似这些主题的帖子“I2C 程序怎么调 为什么我的程序不对?”,然后贴一堆代码上来;“为什么我这样写对,那样写不对”。如果你提过类似问题,或者不知道程序该怎么
2、Debug,就请读本文了。如果你刚开始学习单片机,可能觉得本文不着边际,那么请先死记这些结论,待到 3年后再从头读一遍,一定会和我发生共鸣。1.3 这篇文章针对哪种单片机或者哪种语言?这篇文章不涉及任何具体单片机型号和任何具体语言,你可以把他理解为凌驾在具体嵌入式技术之上的技术,就像哲学那样。1.4 这篇文章有版权吗?有的!但是我不准备出版,也不准备收费。因为我国 99.99%的高校毕业生(甚至读完研究生)都不曾看到这样专业化的程序调试教程,如果按大家为高等教育付出的几万元代价计算,这篇文章我起码会卖到 10 万/人,太天价了!这篇文章的目的是总结、提高,并在 21IC()上提供免费下载,你转
3、载的时候只要保证本文的完整性,并注明出处就可以了。作为免费的等价条件,我也不承担读者因为本文造成的任何损失,请保持独立思考的习惯,并不要轻易使用本文中的代码,这些代码有的是伪语句,这些代码只是为了配合文字说明问题用。1.5 这篇文章所列举的事例和 BUG 真实吗?孙子云:兵不厌诈。这些例子不一定是我所在公司所遇到的,也有我经过组装修饰的,也得给我点隐私权嘛,鉴于本文的非商业化目的,我不对文中任何所提及的产品和技术负责。二二、该如何写程序该如何写程序:我们不怕得罪“Coder”,但是需要首先建立一个观点程序是电子技术里面最最简单的东西,因为程序的确定性比起硬件大得多。处理器的行为是认为设计的数字
4、逻辑行为,不存在硬件上得容差问题。话说硬件设计需要很多数据库型的知识支撑,高频还需要黑色艺术细胞,学写程序除了背点语句,掌握一些基本技巧外加做好规划之外,不需要其他东西,会说话就会写程序会说话就会写程序!结论:程序的确定性比硬件大,不要害怕程序问题。2.1 什么是程序?“程序就是为了让处理器做某件事情而编写的有序汇编代码集合”。这里要注意两件事情,一是“做某件事情”,说明程序是为需求服务的,只有把需求搞清楚了,程序才能写得出来;二是“汇编代码集合”,所有计算机只认识一种语言机器码,也就是汇编所对应的机器语言,其他再华丽的高层语言(例如 C)最终都会成为汇编指令供机器执行,只是这个过程被编译器(
5、例如 C 编译器)自动执行罢了。从这个角度来说,无论你掌握了多少种语言,例如 C、C+、汇编,也无论你可以在计算机二级 C 语言考试得多高分,都不等于你会写程序。结论:写程序,最重要的不是学会某种语言,而是会分析问题并提出解决问题的方法。2.2 顺序程序 如果当一个程序编写好后,所有语句被执行的先后顺序已经确定下来,这就是一个顺序程序。这种程序通常有如下特征:1)不使用中断系统(当然也就包括了不使用操作系统)2)不与操作者发生交互,或者在交互时,死等操作者指令 顺序程序可以用流程图非常明确地描述出来,例如非常经典的“如何把大象放进冰箱”问题,可以用右边的流程图【1】表达 虽然把大象放进冰箱只是
6、一个笑话,但是说明了这个过程是由 3个动作组成的,并且这 3 个动作之间的顺序是不可颠倒的。任何初学者,只要能够理解“如何把大象放进冰箱”的奥妙,就能开始写程序了!作为一个特例,在程序中有等待用户操作环节的,只要在等待时不进行其他操作,同样也是顺序程序。2.3 含有中断的程序 打开冰箱门 把大象放进去 关上冰箱门 图【1】如果一个程序使用了中断,无论这个中断是用硬件中断(例如外中断 INT,串口接收中断等)直接操作,还是通过定时器切换的操作系统,都统称为含有中断的程序。这种程序的特点是:1)含有多个并行运行的代码(例如主循环和中断服务程序)2)这些并行代码间运行的先后顺序错综复杂,我们继续用“
7、如何把大象放进冰箱”问题,来描述。金黄色部分流程线描述了在放大象的过程中接电话的“中断”。一旦程序加入了中断的环节,就会变得复杂起来,因为接电话这个事情可能发生在任何时候打电话的人不可能知道你在放大象嘛。另外,加入了中断环节的程序可能出现很多意想不到的事情,比如接电话期间,大象可能跑掉,或者冰箱门被加上了“不允许打开超过 1 分钟”的限制条件。对于复杂的中断,还可能存在着“接到电话,要求把大象红烧吃了”的情况,这样接完电话以后就没有大象可放了,这就是中断和操作系统中经常遇到的“临界资源”问题。结论:含有中断的程序较为复杂,需要编写者清楚同一时刻,我在做什么,其他人在做什么,用“并发”的方式思考
8、问题,才能写好。2.4 程序模块化 首先说明,程序模块化是为了提高编程效率,扩大编程者对程序的掌握能力,便于程序维护而产生的,对计算机本身而言,程序是没有工整和杂乱的区别的。程序模块化的基本任务就是将复杂的设计任务划分为若干个功能明确,出入口简单的功能块。结论:程序模块化是为了编写而不是为了运行,模块化和函数是两个不同的概念,函数是为了将需要多次使用的代码统一编写,以便减少程序代码量,便于维护;模块化是指将复杂的程序功能化整为零而成的功能块,一个模块可能由多个函数组成,也可能就是一个函数,还有可能只是一段紧密相连的代码块。我们继续用大象的例子来示范,这里的 3 个动作都可以看成模块。假设我们由
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序 调试 宝书
限制150内