下面以实例代码说明如何将func.c中定义的变量声明为全局变量,并在func2.c中调用。
func.c与func2.c中都定义了一个名为func()的函数,都需使用func.c中定义的变量reception。
func.c中定义一个变量reception。该变量在func函数中被调用,由于在一个.c中,且变量定义在函数之前,故可直接使用该变量。
此例中,变量reception定义为uint16_t型,同时被声明为volatile变量。同理,变量reception也可以是结构体类型,如extern struct module reception;
// 子函数func.c
// 定义变量
volatile uint16_t reception;
void func()
{
uint32_t address;
address = (u32)reception; // 读取reception
}
注:volatile变量的含义与工作原理可见: volatile关键字的理解和使用。
在头文件func.h中,将变量reception声明为全局变量extern型。注意,如果变量已经被声明为volatile,则extern要放在volatile之前。
// 头文件func.h
// 引用
#include "stm32f4xx.h"
// 声明reception为全局变量
extern volatile uint16_t reception
/*省略其他内容*/
在func2.h头文件中,引用func.h头文件。
// 头文件func2.h
// 引用
#include "func.h"
这样,子函数func2.c就可以直接使用全局变量reception了。
// 子函数func2.c
void func()
{
uint16_t number;
number = 1;
reception = number; // 给reception赋值
}