AVR学习笔记十四模块化程序设计2.doc

AVR学习笔记十四模块化程序设计2.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
AVR学习笔记十四模块化程序设计2

AVR学习笔记十四、模块化程序设计(二) 14.1 程序模块化设计(二) 14.1.1、实例功能 在前面一讲里,我们已经初步了解了模块化程序设计的简单知识,今天我们再深入探讨一下模块化程序设计。 我们先回顾一下前面一讲的主要内容:模块化程序设计是指将实现同一功能的程序整合起来,封装到一个程序模块中,这样在使用该功能的时候,可以直接调用该模块中的相关函数进行操作。 我们在单片机编程中经常用到的按键检测、液晶显示、数码管显示、串口通信、DS18B20温度检测、DS1302实时时钟等经常用到的程序都可以实现模块化。 模块化编程的最大优点是:思路清晰、移植方便、程序简化。 通常的做法是将某一模块中所有用到的端口定义,函数声明,函数定义等一起写到一个“.h”或者“.c”文件中,然后在主程序里面使用“#include”预编译指令将这些内容包含到主程序中,这样做调用虽然简单,但是对于模块化程序设计来说还是显得有些不太直观,因为我们调用模块中的函数的时候,需要在这一个模块文件中很费劲的找出需要的函数。同样对于移植到别的单片机系统中的时候,需要遍历该模块文件,然后一一更改。如果不小心,很容易造成错误。 更为标准的做法是我们将某一个功能模块的端口定义,函数声明这些内容放在一个“.h”文件中,而把具体的函数实现(执行具体操作的函数)放在一个“.c”文件中。 这样我们在编写主程序文件的时候,可以直接使用“#include”预编译指令将“.h”文件包含进主程序文件中,而在编译的时候将“.c”文件和主程序文件一起编译。 这样做的优点是,我们可以直接在“.h”文件中查找到我们需要的函数名称,从而在主程序里面直接调用,而不用去关心“.c”文件中的具体内容。如果我们要将该程序移植到不同型号的单片机上,我们同样只需在“.h”文件中修改相应的端口定义即可。 在这一讲中,我们继续学习一下模块化程序设计。 本实例有两个功能模块: ● 继续了解模块化程序设计的思路和方法。 ● 编写串口通信的模块化程序。 通过本实例的学习,掌握以下知识点: 初步掌握模块化程序设计的方法。 了解模块化程序设计中需要注意的一些问题 14.2 模块化程序设计需要注意的两点 14.2.1 模块化程序设计中的重复声明 在编写模块程序的过程中,我们在编写具体函数实现的“.c”文件时,需要调用包含相关的端口定义和函数声明的“.h”文件,调用时,我们使用使用“#include”预编译指令来调用“.h”文件。 同样的,在编写主程序文件时,我们仍然需要将需要调用模块的“.h”文件包含到主程序中,这样就出现了一个单片机系统程序中同一个文件被多次调用的情况,这在很多编译系统中进行编译的时候会有“某某.h”文件被重复调用的编译警告或错误提示。 事实上,再同一个单片机系统程序中,在编译的时候出现任何的警告或者错误提示都表示我们的程序编写的有问题,虽然有些警告信息不会影响程序的最终运行结果,但我们希望编译程序的时候不出现任何的警告或者错误提示。 那这种重复调用的情况该怎么避免呢?一种解决方法是,当我们在调用某一个程序文件时,先判断一下在前面的程序里面是否已经定义或者调用了这个文件,如果这个文件没有被定义或者调用,那么我们就执行调用指令,否则我们就略过调用指令。 要实现这种判断,我们需要用到条件预编译指令。“#ifndef”,“#define”,“#endif” 这三条指令使用格式如下: #ifndef xxxxx 语句块1 #define xxxxxx 语句块2 #endif 具体作用是: //如果没有定义文件xxxxxx以及语句块1; #ifndef xxxxx(该处可以为文件名) 语句块1 //定义文件xxxxxx以及语句块2 #define xxxxxx 语句块2 //结束文件xxxxxx以及语句块的定义 #endif 举例如下:下面是文件“usart.h”的避免重复定义的书写方法,具体作用是,先判断是否定义了文件“usart.h”,如果没有定义(#ifndef)文件“usart.h”,则定义文件“usart.h”,并且填写文件“usart.h”的具体内容(即需要定义的内容);填写完需要定义的内容后,使用#endif结束定义。 #ifndef __USART_H__ //如果usart.h没有定义 #define __USART_H__ //则定义usart.h //下面是usart.h的内容 #include avr/io.h #include avr/interrupt.

文档评论(0)

cwhs + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档