1基本原则
质量是要害。没有人会对很差的作业感到满意。当完结高质量的作业时,你会为此而感到自豪。不论你是否知道,你都会由于你的高质量作业而得到诺言。因而,要想为自己所做的事感到自豪,就需求树立个人规范,并为抵达这一规范而尽力奋斗。在抵达这些规范时,再进步规范并持续尽力。应战自己去完结更优异的作业,你将会为自己的成果而感到惊奇。
1.1 了解单片机的才能
【规矩1】规划满意要求的最精简的体系。
正确估量单片机的才能,知道单片机能做什么,最大程度的发掘单片机的潜力对一个单片机体系规划者来说是至关重要的。咱们应该有这样一个知道,即单片机的处理才能是非常强壮的。前期的PC 机,其CPU(8086)处理才能和8051 适当,却能处理适当杂乱的使命。单片机的才能的要害就在软件规划者编写的软件上。只需充沛地了解到单片机的才能,才不会做出“冗余”的体系规划。而选用许多的外围芯片来完结单片机能完结的功用。这样做即增加了体系本钱,也或许会降低了体系的牢靠性。
1.2 体系牢靠性至关重要
【规矩2】运用看门狗。
看门狗电路一般是一块在有规矩的时刻距离中进行更新的硬件。更新一般由单片机来完结,假如在必定距离内没能更新看门狗,那看门狗将发生复位信号,从头复位单片机。更新看门狗的具体方式多是给看门狗芯片相关引脚供给一个电平上升沿或读写它的某个寄存器。运用看门狗电路将在单片机发生毛病进行死机状况时,从头复位单片机。当时有多种看门狗的芯片,如MAXIM 公司的MAX802,MAX813等。而且,有好多种单片机中自身就集成有看门狗。一个外部的看门狗是最好的,由于它不依赖于单片机。假如或许的话,看门狗更新程序不应该放在中止或是子程序中,原则上应该放在主程序中。我从前见过一个工程师,他所调试的程序在运转时偶而会引起看门狗的复位动作,所以他爽性在每10ms 就中止一次的时钟中止程序中清看门狗。我信任他也知道使看门狗失掉效果,可他却没有不是去查明引起这个现象的真实原因。因而,我想提示咱们:不论什么理由,肯定不要疏忽体系毛病的真实原因。高质量的产品来自于高素质的工程师,高质量的产品造就高素质的工程师。
【规矩3】确认体系的复位信号牢靠。
这是一个很简略疏忽的问题。当你在规划单片机体系时,你脑中有这个概念吗?什么样的复位信号才是牢靠的吗?你用示波器检查过你规划的产品的复位信号吗?不安稳的复位信号或许会发生什么样的成果?你有没有发现过你所规划的单片机体系,每次从头上电发动后,数据变得杂乱无章,而且每一次现象并不相同,找不出规矩,或许有时分爽性不运转,或许有时分进入一种死机状况,有时分又一点事都没有正常运转?在这种情况下,你应该查一下你的体系的复位信号。一般在单片机的数据手册(Datasheet)中都会说到该单片机需求的复位信号的要求。一般复位信号的宽度应为。复位电平的宽度和起伏都应满意芯片的要求,而且要求坚持安稳。还有特别重要的一点便是复位电平应与电源上电在同一时刻发生,即芯片一上电,复位信号就已发生。否则,由于没有经过复位,单片机中的寄存器的值为随机值,上电时就会按PC 寄存器中的随机内容开端运转程序,这样很简略进行误操作或进入死机状况。
【规矩4】确认体系的初始化有用。
体系程序开端应延时一段时刻。这是许多单片机程序规划中的常用办法,为什么呢?由于体系中的芯片以及器材从上电开端到正常作业的状况往往有一段时刻,程序开端时延时一段时刻,是让体系中所有器材抵达正常作业状况。终究延时多少才算适宜?这取决于体系的各芯片中抵达正常作业状况的时刻,一般以最慢的为准。一般来说,延时20-100 毫秒现已满足。关于体系中运用嵌入式MODEM 等“慢热”型的器材来说,则应更长。当然,这都需求在体系实践运转中进行调整。
【规矩5】上电时对体系进行检测。
上电时对体系中进行检测是单片机程序中的一个杰出规划。在硬件规划时也应该细细考虑将各个运用到的芯片、接口规划成简略运用软件进行测验的方式。许多有经历的单片机规划者都会在体系上电时(特别是第一次上电时)进行全面的检测,或许更进一步,将体系的运转状况中分为测验方式和正常运转方式,经过参加测验方式对体系进行具体的检测,使得体系的批量检测更为便利简略。别的要留意的是,一个简略明了的毛病显现界面也是颇要费得心思的。比方:体系的外部RAM(数据存储器)是单片机体系中常用的器材。外部RAM 假如存在问题,程序一般都会成为一匹脱缰的野马。因而,程序在发动时(至少在第一次上电发动时)必定要对外部RAM 进行检测。检测内容包含:1)检测RAM 中的单元。这首要经过写入和读出的数据坚持一致。
2)检测单片机与RAM 之间的地址数据总线。总线即没有相互短路,也没有衔接到“地”上。别的,许多芯片,都供给了测验的办法。如串行通讯芯片UART,都带环路测验的功用。
【规矩6】按EMC 测验要求规划硬件。
EMC 测验要求现已成为产品的必需。有许多的文章关于这方面的。
1.3 软件编程和调试
【规矩7】尽或许运用Small 方式编译
对比起Large 方式和Compact 方式,Small 方式能生成更为紧凑的代码。在Small方式下,C51 编译器将没有运用要害词,如idata、pdata、xdata 特别声明的变量统统放在data 单元中。在编程中,关于在的数据区,能够指定放在外部存储器中。
【规矩8】在仿真前做好充沛的预备
单片机硬件仿真器给单片机开发者带来了极大的便利,一起也很简略造成人的依赖性。许多时分,没有仿真器却能促进工程师写出更高质量的程序。或许在硬件仿真调试之前,下面预备作业将会对你有用:
1)程序编完后,对代码细心逐行检查。检查代码的过错,树立自己的代码检查表,对常常易错的当地进行检查。检查代码是否契合编程规范。
2)对各个子程序进行测验。测验的办法:用程序测验程序,编制一个调用该子程序的代码,树立要测验子程序的进口条件,再看看它是否按预期输出成果。
3)假如代码有修正,再次对代码进行检查。
4)有或许的话,进行软件仿真——Keil C 的软件仿真功用非常强壮。软件仿真能够避免因硬件的过错,如器材损坏、线路断路或短路,而引起调试的过错。
5)开端硬件仿真。
【规矩9】运用库函数
重用代码,尤其是是规范库的代码,而不是手艺编写你自己的代码。这样更快、更简略也更安全。KeilC 中供给了多个库函数,这些库函数的用法在KeilC 的帮助文件中有具体的描绘。
【规矩10】运用const。
这一点在许多经典的关于C 和C++的书本中是必谈的关键。在《Exceptional C++》一书中,对这点有很精彩的描绘,现摘抄如下:“没有正确的安全意识的枪手在世界上是不或许活的很长的。const 观念不正确的程序员也是相同和没有时刻戴紧帽子的正确,没有时刻检查带电电线的电工相同不会活的很长。”在C 言语中,const 润饰符表明告知编译器此函数将不会改动被润饰的变量的指向的任何值(除了强制类型转化)。当把指针作为参数传递时,总是适宜地运用const,不只能够避免你无意中过错的赋值,而且还能够避免在作为参数将指针传递给函数时或许会修正了本不想改动的指针所指向的目标的值。如:
const int num= 7;
num = 9; //有/或许得到编译器的正告。
const char *ptr,则表明该指针所指向的内容不会被改动,假如在程序中被发生对其赋值的操作,编译时将出过错提示。如:
const char *ptr = “hello”;
*ptr = `H`;//过错,所指内容不行改动也可将const 放在星号后边来声明指针自身不行改动。如:
char* const ptr;
ptr++; //过错,指针自身不行改动
也可一起制止改动指针和它所引证的内容,其方式如下: const char* const ptr;
【规矩11】运用static
static 是一个能够削减命名抵触的有用东西。将只在一个模块文件中的变量和函数运用static 润饰,将不会和其他模块或许具有相同称号的函数和变量在模块衔接时不会发生称号抵触。一般来说,只需不是供给给其它模块运用的函数,和非全局变量,均应运用static 润饰。将子程序中的变量运用static 润饰时,表明这个变量在程序开端时分配内存,在程序结束时开释,它们在程序履行期间坚持它们的值。如:
void func1(void)
{
static int time = 0;
time++
}
void func2(void)
{
static int time = 0;
time++;
}
两个子程序中的time 变量运用static 润饰,所以它们是静态变量,每调用一次time将进行加1,并坚持这个值。它们的功用与下面程序类似:
int time1 = 0;
int time2 = 0;
void func1(void)
{
time1++
}
void func2(void)
{
time2++;
}
咱们能够看出,运用static 润饰后,模块中的全局变量削减,使得程序的更为简略。
【规矩12】不要忽视编译器的正告。
编译器的给出的正告都是有的放矢,在没有查清引起正告的真实原因之前,不要忽视它。
【规矩13】留意溢出问题,写安全的代码。
1.4 KeilC 编程
【规矩14】深化了解你所用的东西。
细心检查KeilC 顺便的帮助文件,你能找到你期待已久的东西。KeilC 是当时最好用的单片机开发软件。要充沛利用该软件的功用,就必须对它深化的进行了解。
【规矩15】不要运用言语的偏僻特性,而且记住,耍小聪明会贻害无穷。最重要的是编写你了解的代码,了解你编写的代码,你就或许会做得很好。
2 引荐书目
要成为一个优异的单片机体系产品规划工程师,爱好、热心、责任心至关重要。
2.1 单片机技能学习
《微机原理及运用(从16 位到32 位) 》戴梅萼等著清华大学出书社。校园教材,也是当年我学习单片机的启蒙书。
2.2 C51 编程学习
《单片机高档言语C51 Windows 环境编程与运用》作者:徐爱钧彭秀华电子工业出书社。这本书简直覆盖了C51 编程的方方面面,最新版别对当时运用最广的keilC 也有很具体的叙述。关于刚学C51 编程的同志,本书是上上之选,强力引荐。比起如今书市上的所谓什么“C51 编程圣经”之类的书强得多。
2.3 C 言语编程必读
《C 圈套与缺点》Andrew Koenig 著
《C 专家编程》Peter Van Der Linden 著
C 言语开发技能经典之作,C 程序员必读之书,数十年来经久不衰。假如你想对C言语全面的把握,真实了解C 言语的精华,这两本书是必读之作。由人民邮电出书社出书的中文译著也还不错。
2.4 程序规划技能方面
《数据结构》 严蔚敏 清华大学出书社。清华大学出书社的教材质量安稳,中规中矩,价格相对来说也廉价一点。
《程序规划实践》Brian W. Kernighan Rob Pike 著;《代码大全》(网上有下载)。这两本是能让你看后,感觉有大打破的那种书本,千万别吝惜银子。