Xcode为Arduino开发

use*_*764 5 c c++ xcode arduino undefined-symbol

请仔细阅读以确保您了解我想要做的事情.

  • 我希望Xcode能够编译,但只有这样我才能在Xcode中调试.
  • 我不想使用Xcode编译或上传代码到Arduino板.我将在"使用外部编辑器"模式中使用Arduino IDE.

我做了什么(也作为可能想要做同样事情的人的未来参考):

  • 在项目设置中(单击左窗格中的项目文件)
  • 我已将编译器更改为GCC以避免许多错误.
  • 我已将以下路径添加到页眉搜索路径和库搜索路径:

    • /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/lib/gcc/avr/4.3.2/include
    • /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/avr/include
    • /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino

(如果您已在"应用程序"文件夹以外的位置安装了Arduino.app,则需要相应地调整路径.)

在main.cpp中,我已经包含了<WProgram.h>,但这还不够.我正在未定义的标识符错误(SPCR,SPE,MSTR,SPR1,SPR0)由于不能够传递到-mmcu=somechipname作为一个标志给编译器,这引起了不设备加以界定和avr/io.h以不能包括限定的文件那些符号.我通过手动包括<avr/iom328p.h>哪个是我的芯片的适当头文件.

那是我有多远.

现在我收到这些错误:

Undefined symbols for architecture i386:
  "_init", referenced from:
      _main in main.o
  "_setup", referenced from:
      _main in main.o
  "_loop", referenced from:
      _main in main.o
  "_pinMode", referenced from:
      SBSetup()    in main.o
  "_digitalWrite", referenced from:
      SBSetup()    in main.o
Run Code Online (Sandbox Code Playgroud)

整个main.cpp包括邪恶的违规代码是这样的:

#include <WProgram.h>
#include <avr/iom328p.h>    // Getting around warning "device type not defined"
#define NumLEDs 25
#define clockpin 13 // CI
#define enablepin 10 // EI
#define latchpin 9 // LI
#define datapin 11 // DI

int LEDChannels[NumLEDs][3] = {0};
int SB_CommandMode;
int SB_RedCommand;
int SB_GreenCommand;
int SB_BlueCommand;

void SBSetup(void) {
    pinMode(datapin, OUTPUT);
    pinMode(latchpin, OUTPUT);
    pinMode(enablepin, OUTPUT);
    pinMode(clockpin, OUTPUT);
    SPCR = (1<<SPE)|(1<<MSTR)|(0<<SPR1)|(0<<SPR0);
    digitalWrite(latchpin, LOW);
    digitalWrite(enablepin, LOW);
}

int main(void)
{
    init();
    setup();
    for (;;)
        loop();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我对此有何看法?

pau*_*sm4 1

我认为最好的方法可能是忘记 XCode,而只使用 Arduino IDE。

无论它的价值如何,听起来都不像是在为正确的平台(i386?)构建。假设您已经拥有 GCC 的 AVR 工具链,您可能会幸运地查看 Arduino IDE 源代码中的默认开关:

src\编译器.java

祝你好运!

  • 另外,我发布此内容是因为我显然不想使用 Arduino IDE。请不要告诉我只使用它。 (4认同)
  • 不,我想使用 Xcode,因为 Arduino IDE 很糟糕。严重地。据我所知,没有办法将 avr-gcc 与 Xcode 一起使用...而且我认为我不需要它,因为从 Xcode 编译的代码不会用于 arduino。 (3认同)