首页 理论教育 单片机开发实例:主程序与子程序

单片机开发实例:主程序与子程序

时间:2023-10-23 理论教育 版权反馈
【摘要】:如主程序main.c中包含另一个C文件;文件关联指的是主程序通过包含子程序对应.h文件的方式,主程序和子程序之间通过包含的H文件关联。

单片机开发实例:主程序与子程序

在复杂的单片机系统中,程序设计通常采用模块方法。程序模块化的基本思想为:项目程序可分为主程序和子程序,每个程序可以由很多个函数组成;一个项目有很多个子程序,只有主程序含有主函数;主程序通过头文件包含的形式实现对子程序相应的函数调用。如#include语句就是一种文件包含和文件关联的形式。

文件包含是指一个文件将另外一个文件的内容全部包含进来。如主程序main.c中包含另一个C文件;文件关联指的是主程序通过包含子程序对应.h文件的方式,主程序和子程序之间通过包含的H文件关联。文件关联不是包含子程序本身。如主程序main.c包含了in-trins.h则把main.c和intrins.h的内部函数_nop_()等关联了起来,即main.c可以调用in-trins.h中声明的函数。

reg51.h是Keil软件中定义MCS-51系列单片机内部资源的头文件,在编写单片机程序时,只要用到MCS-51系列单片机内部资源,程序前面就需要把此文件包含进来。

1.文件包含

复杂的单片机系统,其程序经常用到文件的包含,文件包含最简单应用是直接在主程序中包含子程序的C文件。

在项目3程序中,我们可以把延时函数剪切到文档中并保存为一个delay.c文件,并存放在与主程序同一个文件中,然后通过文件包含的形式就可以被主程序调用,如

2.文件关联

如果把子程序delay.c文件替换为delay.h文件,则delay.h关联delay.c文件。主程序调用delay.h文件,则关联delay.c内部函数。如

delay.h的内容为

1)条件指示符#ifndef为预编译指令,这种编译称为条件编译。(www.xing528.com)

2)ifndef是if no define的简写。#ifndef_DELAY_H_和#define_DELAY_H_可以翻译为:如果前面没有定义_DELAY_H_,则定义_DELAY_H_,并声明到#endif之间的内容;反之,如果定义了_DELAY_H_,则不再定义_DELAY_H_和声明#endif之间的内容。

3)#endif指示符是#ifndef中if的结束标志。

ifndef_DELAY_H_,#define_DELAY_H_,#endif 3条语句可以用条件编译理解。也是著名的防重复包含的条件编译过程,防重复包含是模块化编程中很重要也是最基本的思想。

文件关联程序中包含H文件在复杂程序设计中经常采用,在程序编译链接过程中能大大提高程序的代码率。假如一个复杂的单片机程序中有main.c、delay.c、ds1302.c、dis-play.c 4个文件,分别为主程序文件、延时子程序文件、DS1302驱动子程序文件和数码管显示子程序文件,如果现在main.c、ds1302.c和display.c 3个文件都需要用到delay.c中的delay函数,则这3个文件中都要有#include“delay.c”的语句。这样在预处理阶段头文件展开过程中,就会把delay.c的全部内容都复制到包含它的文件中,链接之后可执行文件中就共同拥有4份一模一样的delay.c文件中的代码,大大浪费了本来就很小的单片机存储空间,并且在调试过程中可能会出现很多问题。而H文件只是对应C文件中的函数声明和有关定义,并且有防重复包含的编译指令。

3.编译过程

一个高级语言程序从源代码到生成可执行文件的过程可大致分为预处理、链接、编译3个阶段。其中预处理阶段做的工作主要有头文件和宏定义的展开、去掉源代码中的空格、换行、注释等内容;编译过程主要是将高级语言源代码生成二进制机器码,经过编译之后生成的文件称为目标文件。如果程序有若干个文件组成,而各个文件在链接前的所有阶段都是相互独立的,也就是说每个文件到编译阶段之后都会有自己对应的目标文件,我们可以认为链接阶段做的工作就是把各个目标文件按照一定规则组合到一起生成一个可执行文件。

值得注意的是,即使程序只有一个文件也必须经过链接阶段,因为此阶段还有一个非常重要的工作就是链接程序中用到的一些库文件。从预处理到链接每个阶段都会生成对应的文件,其中预处理到编译阶段生成的文件叫做中间文件。单片机程序最终使用的是可执行代码hex文件,我们很少注意Keil开发平台各个步骤生成的中间文件,所以我们在使用Keil软件编程时也很少关心中间文件生成的记录。

函数调用、头文件包含是任何C语言程序模块化设计重要特点,不但增加了程序的可读性,而且提高了程序的共享性,在以后的项目设计也中会经常用到。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈