【发布时间】:2021-03-13 20:31:22
【问题描述】:
我正在尝试定义一组全局变量来配置我的设备,大约 10 个在专用的 .c 文件中,将在编译时定期更改(根据设备要求),我希望这些放在这个单独的文件中,以便可以轻松更改它们。然后在我的程序中的各种文件中调用这些变量。并且从不改变只读取。问题是我的编译器(用于 PIC MCU 的 XC8)没有定义该变量,因为它只能在文件中看到该变量的一次使用,即使在整个程序中使用 extern 调用它也是如此。
config.h
unsigned int Global_A;
unsigned int Global_B;
void config(void);
config.c
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;
}
main.c
#include config.h
#include prog_a.h
void main(void)
{
while(1)
{
config();
prog_a();
}
}
因此,等效的 var_A 始终为 0,因为编译器已经取消了 config.c,因为它看不到再次调用的变量。
我假设答案对于那些更精通的人来说非常明显,但我在网上找不到任何东西。之前在文件中使用 extern 和 globals 之前,我没有遇到任何问题。但我可能只是从根本上错误地使用它,所以请随意指责我。
提前致谢。
p.s 如果不是很明显,这是一个示例代码来说明我的问题。
【问题讨论】:
-
我不太明白这个问题,但我可以说在
h文件中定义 变量通常不是一个好主意。您可以在标题中使用extern声明它们。 -
您是否真的使用
config.c源文件构建,并链接到从它创建的目标文件?您如何构建您的程序? -
MPLABX 自动构建和生成链接器