我正在尝试定义一组全局变量来配置我的设备,大约 10 个在专用的 .c 文件中,将在编译时定期更改(根据设备要求),我希望这些在这个单独的文件,因此它们都可以轻松更改。然后在我的程序中的各种文件中调用这些变量。并且从不改变只读取。问题是我的编译器(用于 PIC MCU 的 XC8)没有定义变量,因为它只能看到文件中变量的一次使用,即使在整个程序中使用 extern 调用它也是如此。
配置文件
unsigned int Global_A;
unsigned int Global_B;
void config(void);
配置文件
void config(void)
{
unsigned int Global_A=987;
unsigned int Global_B=123;
}
prog_a.h
extern unsigned int Global_A;
extern unsigned int Global_B;
unsigned int var_A;
void prog_a(void);
prog_a.c
unsigned int var_A=0;
void prog_a(void);
{
var_A=Global_A+Global_B;
}
主程序
#include config.h
#include prog_a.h
void main(void)
{
while(1)
{
config();
prog_a();
}
}
结果,等效的 var_A 始终为 0,因为编译器已经取消了 config.c,因为它看不到再次调用的变量。
我假设答案对那些更精通的人来说非常明显,但我在网上找不到任何东西。我在使用 extern 和 globals 之前没有遇到任何问题,当它们在定义的文件中使用时。但我可能只是从根本上错误地使用它,所以请随意责备我。
提前致谢。
ps 如果不是很明显,这是一个示例代码来说明我的问题。