Atmel Studio 6;嵌入式C:尽管使用了Header Guard,但存在多个声明错误

时间:2015-02-20 16:07:19

标签: c gcc embedded avr include-guards

我正在Atmel Studio 6中为AVR设备编写嵌入式C应用程序。我对“文件层次结构”并不擅长,但我一直在努力。另外,感谢您抽出宝贵时间来解决这个问题。

以下是违规文件的文件结构:

enter image description here

所以PLAYOP_FSM.C是一个调用低级函数的有限状态机。它需要调用的一些函数在BTN_INTERFACE.C中实现;在BTN_INTERFACE.H

中定义

所以:PLAYOP_FSM.C和BTN_INTERFACE.C都需要包含头文件。当然,我设置了标题保护以避免多重定义。

然而,我仍然得到:

multiple definition of 'X'

其中'X'实际上是我的变量:u_yPos和u_xPos。

其他一个错误是:

first defined here

然后它将BTN_INTERFACE.O置于文件下。

以下是错误列表的快照:

enter image description here

到目前为止我做了什么

我检查确保我在头文件中没有“包含”,我没有意外地包含“.c”文件。我检查确保我没有在其他任何地方包含BTN_INTERFACE.H。

如果我带走

,我可以编译它
#include BTN_INTERFACE.H
我的PLAYOP_FSM.C文件中的

行。更重要的是,如果我这样做,编译器不会抱怨我在PLAYOP_FSM.C中进行的函数调用,因此当我对它们进行注释时不会抛出任何错误。

如果我注释掉BTN_INTERFACE.C包含行,那么正如预期的那样,我会收到有关“不知道什么是哑变量”的错误。

0 个答案:

没有答案