Пожалуйста, прочитайте это хорошо, чтобы убедиться, что вы понимаете, что я хочу сделать.
- Я хочу, чтобы Xcode мог компилироваться, но только так, чтобы я мог отлаживать в Xcode.
- Я НЕ хочу использовать Xcode для компиляции или загрузки кода на плату Arduino. Вместо этого я буду использовать IDE 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
Весь файл 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;
}
Что мне об этом?