title
收藏本站
联系站长
关于本站
首页 信息发布 产品宣传 论坛交流 学习文章 技术人生 项目源码 技术资料 人才收录
 今天是: 2011年8月21日 星期 日
欢迎光临!单片机群号:154389772 25930265 71062262 21829895 64584393 26583231  
热门文章推荐


当前位置:首页>>>单片机学习文章>> 程序.H.C文件的结构-适合初学
程序.H.C文件的结构-适合初学
作者:md9给他留言 [转载] 字体:
发表于:
2010-01-12 11:46:09
全局变量 && 宏定义 
★★★★★★★★★★★★ 
在程序较大的情况下,为了方便阅读和维护。一般会将程序按一定的功能进行分块处理,每个程序块可以写到一个或多个“ .c”文件中;而每个模块要使用到的数据就是全局变量; 
全局变量是从它定义的开始,就分配了内存;而且可在整个项目中的各个模块公用的; 
这种情况下,就要使用到 exetern 关键字进行定义, 必须在 .C 和 .H 文件中定义。 
一般如下定义: 
XX.c 文件中定义一个变量:unsigned char disp_flag;   
XX.h 文件中就要这样定义:extern unsigned char disp_flag; 
这样才能在各个模块中使用全局变量disp_flag;............. 
这种重复的定义很容易导致错误。以下是参照 ucos_II 中的方法,只须在头文件中定义一次。就可以在项目中各个模块使用该全局变量了;  
掌握这种方法后,使用非常方便,灵活。哈哈~! 
在 XX.h 文件中定义内容如下:   
#ifdef _MAIN_C_ 
    #define global 
#else 
    #define global extern 
#endif 
/***********变量定义**********/ 
global unsigned char dispbuffer[3]; 

/*在这一段中定义要使用的全局变量,注意:在前面一定记得加上 global,( 也可以是你自己喜欢的 
字符串,但是一定要与上面宏定义“#define global  ; #define global extern”  使用的字符串一致;本例中定义了global,那么在定义变量前就加“global”了....) 
............. 
/***********变量定义**********/ 
#undef global 
/**************************/ 
#endif 

在项目的其中一个 XX.c 文件中(一般选main.c,个人习惯而已) 定义内容如下:  
#define _MAIN_C_   //   ( 注意这里定义的字符串一定要与 XX.h文件中的第一句 
   // “#ifdef _MAIN_C_” 定义的字符口串一致 ) 
#include "XX.h"       //   包含头文件 
void main() 

     . 

#endif 
在其它的 .c 文件中, 只要在开头写: 
#include "XX.h"      //   包含头文件 
…… 
void xxx() 

 ......... 

这样写之后,所有全局变量只须在“XX.h ”文件中定义一次就可以了
另外一种是学UCOS的如下://------------------------------------- 
// A.h 
#ifndef _H_A 
#define _H_A 
#include "main.h" 
extern int A; 
... 

#endif 
//------------------------------------- 
// A.c 
#include "A.h" 

int A; 
... 
// B.h 
#ifndef _H_B 
#define _H_B 
#include "main.h" 
extern int B; 
... 
#endif 
//------------------------------------- 
// B.c 
#include "B.h" 
int B; 
...... 
//------------------------------------- 
// main.h 
#ifndef _H_MAIN 
#define _H_MAIN 
#include <xxxx.h> 
#include "A.h" 
#include "B.h" 
... 
#endif 
//------------------------------------- 
// main.c 
#include "main.h" 
void main(void) 

   ... 

==================== 
这样,A.c只引用A.h,B.c只引用b.h 
除main.h外,其它.h文件只引用main.h
(本文引自www.mcujl.com/article.asp?conID=503)


---------------------------------------------------------------------------------------------------
[打印文章] [关闭本页] [返回顶部]
本网站部分资料转自网上,如有侵权请来信告明,我们会尽快删除  | 网站地图
Copyright @ 2007-2010 深圳单片机交流网.版权所有
网站创办者:詹长亮,周发辉,李林盛
网站支持:zcl843@163.com QQ:380476830 13723787271