使用Xcode开发Arduino的方法

5
请仔细阅读以确保您理解我想做的事情。
  • 我确实希望Xcode能够编译,但只是为了在Xcode中进行调试。
  • 我不想使用Xcode来编译或上传代码到Arduino板。我将使用Arduino IDE的“使用外部编辑器”模式。

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

  • 在项目设置中(单击左窗格中的项目文件)
  • 我已将编译器更改为GCC以避免许多错误。
  • 我已将以下路径添加到Header Search Paths和Library Search Paths:

    • /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>,但这还不够。由于无法将-mmcu=somechipname作为标志传递给编译器,导致未定义的标识符错误(对于SPCR、SPE、MSTR、SPR1、SPR0),这导致没有定义设备,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

整个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;
}

What do I about this?


其实,有人让我意识到这些错误是在链接时发生的。所以代码确实编译了,这正是我为了调试目的所希望的。无论如何,我会保持开放状态,因为我要等8个小时才能自己回答这个问题,而且如果那些错误消失了,那就更好了。 - user922764
你无法使用Xcode“编译”任何东西。但是,您可以将Xcode IDE用作高级编辑器,并设置它与独立的GCC一起使用,以便在单击Xcode上的“运行”时进行编译/上传,没有其他操作。您无法将LLDB附加到Arduino进行调试。 - Mojtaba
请注意,当您看到 Undefined symbols for architecture i386: 时,这意味着您正在尝试在 i386 (x86 intel) 机器上编译 AVR(或可能是ARM)代码,但它不起作用。 - Mojtaba
3个回答

3

1

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

无论价值如何,听起来你甚至都没有为正确的平台(i386?)构建。假设你已经拥有了GCC的AVR工具链,你可以尝试查看Arduino IDE源代码中的默认开关:

src\Compiler.java

祝你好运!


3
不,我想使用Xcode,因为Arduino IDE太差了。说真的。 据我所知,无法在Xcode中使用avr-gcc……而且我认为我不需要它,因为从Xcode编译的代码将不用于Arduino。 - user922764
4
此外,我发布这篇文章是因为我显然不想使用Arduino IDE。请不要告诉我只是使用它。 - user922764
我不是在告诉你“只是使用它”。我是说,Xcode适用于编辑、编译、链接和调试你的(Mac?)代码;但是如果你试图强制XCode编辑、编译、链接、下载和调试Arduino代码,你可能无法做得很远。对于Arduino部分,最好还是使用Arduino IDE。我也想说,如果你想“强行喂食”XCode,可以从查看Compiler.java中的GCC编译器标志等方面获得一些提示。个人意见... - paulsm4

0

有很多人制作XCode项目模板,用于从XCode进行编译和上传。

我刚刚添加了我的版本,可以包括库、代码完成等等,但它们只能作为XCode 3.2中的项目模板使用。

我认为你仍然可以在XCode4中打开项目,并将它们用作解决错误的指南。

你可以在这里找到它们:https://github.com/timknapen/Arduino-With-XCode


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接