extern的用法

来源:互联网 发布:ubuntu unity 编辑:程序博客网 时间:2024/04/30 09:25

extern是对源程序进行代码拆分的好东西;特别是对函数之间进行量传递的全局变量而言。

1、包含头文件的代码中使用extern将被包含文件里声明的变量引用进来。

2、包含文件与被包含文件同时使用extern。

如以下函数:MAIN.C

#include <pic.h>                    // 包含系统寄存器定义
__CONFIG (RC & LVPDIS & WDTDIS);  // 配置字内容
bit bFlag=0;              // 用来表示LED的状态的位变量,初始化为0
void interrupt ISR(void)  //中断服务函数,因为它用interrupt修饰了
{
  if(INTF==1)            // 判断INT中断标志是否置位(为一)
  { 
    INTF=0;          // INTF置位,说明有中断产生,需要清除中断标志
    bFlag=!bFlag;  // 每出现一次中断,LED状态翻转,由于我们用bFlag  
                  // 来存储LED状态,所以也就是bFlag内容取反操作。
  }
}
main()       // 主函数入口

  INTE=1;   // 打开INT中断
  GIE=1;    // 打开总中断
  INTEDG=1;  // 设置触发中断的条件为电平从高到低触发
  TRISB0=1;  // B口方向位最低位为输入,否则无法响应INT中断
  TRISD=0;   // D口方向设置为输出
  while(1)
  {
    RD0=bFlag;  // 把小灯状态送RD0
  }
}


拆分为多个文件,MAIN.C、CONFIG.H、ISR.C、ISR.H

使用第一种办法

CONFIG.H
//定义常用配置
#ifndef _CONFIH_H_
#define _CONFIG_H_


#include "pic.h"


#define uchar unsigned char
#define uint unsigned int


#define Enabled 1
#define Disabled 0


#endif




ISR.H
//声明函数

#ifndef _ISR_H_
#define _ISR_H_


  void interrupt ISR(void);
  
#endif




ISR.C
//定义函数及外部变量

#include "ISR.H"
#include "CONFIG.H"


bit bFlag=0;  //定义外部变量


void interrupt ISR(void)
{
if(INTE==1&&INTF==1)
{
INTF=0;
bFlag=!bFlag;
}
}




MAIN.C
//主函数

#include "CONFIG.H"
#include "ISR.H"


__CONFIG(RC & WDTDIS & LVPDIS);


extern bit bFlag; //使用外部变量


void main(void)
{
INTE=1;
GIE=1;
INTEDG=1;
TRISD=0;

while(Enabled)
{
RD0=bFlag;
}
}



使用第二种办法

CONFIG.H
//定义常用配置

#ifndef _CONFIH_H_
#define _CONFIG_H_


#include "pic.h"


#define uchar unsigned char
#define uint unsigned int


#define Enabled 1
#define Disabled 0


#endif




ISR.H
//声明函数

#ifndef _ISR_H_
#define _ISR_H_


  void interrupt ISR(void);
  
#endif




ISR.C
//定义函数及外部变量

#include "ISR.H"
#include "CONFIG.H"


extern bit bFlag=0;  //定义外部变量


void interrupt ISR(void)
{
if(INTE==1&&INTF==1)
{
INTF=0;
bFlag=!bFlag;
}
}




MAIN.C
//主函数

#include "CONFIG.H"
#include "ISR.H"


__CONFIG(RC & WDTDIS & LVPDIS);


extern bit bFlag; //使用外部变量


void main(void)
{
INTE=1;
GIE=1;
INTEDG=1;
TRISD=0;

while(Enabled)
{
RD0=bFlag;
}
}

原创粉丝点击