阿杜伊诺;C:将函数和全局变量放入外部文件中

阿杜伊诺;C:将函数和全局变量放入外部文件中,c,include,arduino,header-files,C,Include,Arduino,Header Files,这应该是一个简单的问题。我试图将代码拆分为草图中的两个文件: test.ino: void setup(){} void loop(){ fn(); } 测试c: char myChar = '?'; void fn(){ myChar++; } 我尝试过使用一个test.h文件进行各种配置,例如: extern char myChar, charmychar void fn() extern void fn() 在不同的文件中包含test.c和test.h文件的各种组合,但我总是会遇到

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

test.ino:

void setup(){}
void loop(){ fn(); }
测试c:

char myChar = '?';
void fn(){ myChar++; }
我尝试过使用一个test.h文件进行各种配置,例如:

  • extern char myChar,
  • charmychar
  • void fn()
  • extern void fn()
在不同的文件中包含test.c和test.h文件的各种组合,但我总是会遇到一个或另一个编译器错误,例如:

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

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

test.cpp.o:在函数“setup”中:

C:\Program Files\arduino-1.0.4/test.ino:4:对'fn()的未定义引用


我真的很喜欢这个。任何帮助都将不胜感激。

Arduino IDE确实是为初学者设计的。当您变得更好时,您可能希望分支到更传统的编程工具


Arduino项目实际上只是c/c++应用程序。在这方面,整个c/c++社区都在支持您。他们最喜爱和最鄙视的工具之一是make。您可以使用它部署和构建项目。这是一个很好的起点

您应该首先尝试理解变量的声明和定义之间的区别。幸运的是,stackoverflow和


关键是将所有声明放入头文件(.h),将所有定义放入实现文件(.c)。最后一步是确保标题只包含一次。这是通过所谓的包含防护来实现的。有关stackoverflow和。

的详细信息,我对.ino扩展不熟悉?这是C++文件吗?在这种情况下,如果函数是在C文件中定义的,则可能需要使用C链接。你可以这样做:extern“C”void fn()+1谢谢,我正在考虑。但是Arduino IDE以其简单性成为了一个实时节省器,它拥有我所需要的一切,几乎没有配置,我宁愿不去搞乱一个沉重的工具链。