4

这应该是一个简单的问题。我正在尝试将代码拆分为草图中的两个文件:

测试.ino:

void setup(){}
void loop(){ fn(); }

测试.c:

char myChar = '?';
void fn(){ myChar++; }

我尝试使用具有各种配置的 test.h 文件,例如具有以下行:

  • extern char myChar;,
  • char myChar;
  • void fn();
  • extern void fn();

以及在不同文件中包含 test.c 和 test.h 文件的各种组合,但我总是会遇到一个或另一个编译器错误,例如:

test.cpp.o:(.data.myChar+0x0): 'myChar' 的多重定义

test.co:(.data.myChar+0x0): 首先定义在这里

或者

test.cpp.o:在函数“设置”中:

C:\Program Files\arduino-1.0.4/test.ino:4: undefined reference to `fn()'

我真的用这个把头发拉出来了。任何帮助将不胜感激

4

2 回答 2

4

Arduino IDE 真正适用于初级程序员。随着您变得更好,您可能希望分支到更传统的编程工具。

Arduino 项目实际上只是 c/c++ 应用程序。在这方面,您拥有整个 c/c++ 社区。他们最喜爱和最鄙视的工具之一叫做 make。您可以使用它来部署和构建您的项目。这是一个很好的起点。http://ed.am/dev/make/arduino-mk/arduino.mk

于 2013-05-12T18:17:39.923 回答
1

您应该首先尝试了解变量的声明和定义之间的区别。幸运的是,这里这里的 stackoverflow 已经讨论了这一点。

关键是将所有声明放入头文件 (.h) 并将所有定义放入实现文件 (.c)。最后一步是确保标题只会被包含一次。这是通过所谓的包含防护实现的。详细信息在此处此处的 stackoverflow 上再次已知。

于 2013-10-22T18:05:06.947 回答