Programmierung für das Arduino ohne die Arduino IDE .. aber mit den mitgelieferten Bibliotheken?

10

Ich habe kürzlich ein neues Projekt mit meinem Arduino gestartet, das seit einiger Zeit Staub sammelt. Zusammen mit der physischen Platine, die Staub sammelt, hat auch meine Kopie von avr-gcc und den Arduino-Bibliotheken. Ich kann die Aktualisierung von avr-gcc verwalten, kann mich aber nicht erinnern, wie ich die Arduino-Bibliotheken kompiliert habe. Bei der Arduino-Quelle gibt es aufgelistete Quelldateien und dergleichen, aber kein Makefile (das ich sehen kann) zum tatsächlichen Erstellen der Bibliothek. Das Erstellen der IDE ist mir egal, ich möchte nur die Bibliothek im Binärformat und die Header-Dateien, die ich benötige. Gibt es dafür eine Dokumentation oder ähnliches?

Ich möchte die Arduino IDE nicht verwenden, ich bevorzuge die Verwendung meines eigenen Texteditors und eines Makefiles.

Earlz
quelle
1
Dies kann für Sie hilfreich sein.
Arminb
1
@arminb bleaklow.com/2010/06/04/a_makefile_for_arduino_sketches.html wäre nützlicher als das. Ihr Link bietet nur eine Möglichkeit, Skizzen über die Befehlszeile zu erstellen, nicht eine Möglichkeit, die Arduino-Bibliothek zu erstellen. So oder so irrelevant, weil ich meine eigene Frage beantwortet habe
Earlz
@jippie Ich habe mir das angeschaut (nicht auf Nachfrage, sondern kürzlich bei einem erneuten Besuch), war aber durch die Tatsache, dass die Arduino IDE installiert sein muss, verstört. Art besiegt den Zweck
Earlz

Antworten:

9

Ich habe ein kleines Projekt mit einem benutzerdefinierten Build-System (mit Ruby) erstellt, das dies ziemlich einfach macht, ohne die Arduino IDE installieren zu müssen. Grundsätzlich werden eine Vorlage Makefile und ein Ruby-Skript verwendet, um das Kompilieren der Arduino-Bibliotheken extrem einfach zu machen. Sie können es unter https://github.com/Earlz/make-wiring sehen

Ich lasse jedoch die alte Antwort hier, um Informationen zum Rollen Ihrer eigenen zu erhalten. Es ist allerdings ziemlich umständlich und nervig:

Richtungen:

  1. Laden Sie eine Kopie des Arduino IDE-Quellcodes herunter
  2. Kopieren Sie den Inhalt von hardware/arduino/cores/arduinoin ein neues Verzeichnis, das ich als arduino_build bezeichnen werde
  3. Kopieren Sie die pins_arduino.hDatei aus der Arduino-Variante hardware/arduino/variants(überprüfen Sie board.txt, wenn Sie sich nicht sicher sind) nach arduino_build
  4. Fügen Sie dieses Makefile zu arduino_build hinzu:

.

#BSD licensed, see http://lastyearswishes.com/static/Makefile for full license

HDRS = Arduino.h binary.h Client.h HardwareSerial.h IPAddress.h new.h pins_arduino.h Platform.h Printable.h Print.h \
    Server.h Stream.h Udp.h USBAPI.h USBCore.h USBDesc.h WCharacter.h wiring_private.h WString.h


OBJS = WInterrupts.o wiring_analog.o wiring.o wiring_digital.o wiring_pulse.o wiring_shift.o CDC.o HardwareSerial.o \
    HID.o IPAddress.o main.o new.o Print.o Stream.o Tone.o USBCore.o WMath.o WString.o

#may need to adjust -mmcu if you have an older atmega168
#may also need to adjust F_CPU if your clock isn't set to 16Mhz
CFLAGS = -I./ -std=gnu99  -DF_CPU=16000000UL -Os -mmcu=atmega328p
CPPFLAGS = -I./ -DF_CPU=16000000UL -Os -mmcu=atmega328p

CC=avr-gcc
CPP=avr-g++
AR=avr-ar


default: libarduino.a

libarduino.a:   ${OBJS}
    ${AR} crs libarduino.a $(OBJS)

.c.o: ${HDRS}
    ${CC} ${CFLAGS} -c $*.c

.cpp.o: ${HDRS}
    ${CPP} ${CPPFLAGS} -c $*.cpp

clean:
    rm -f ${OBJS} core a.out errs

install: libarduino.a
    mkdir -p ${PREFIX}/lib
    mkdir -p ${PREFIX}/include
    cp *.h ${PREFIX}/include
    cp *.a ${PREFIX}/lib

Und dann einfach rennen

make
make install PREFIX=/usr/arduino (or whatever)

Und um dann die kompilierten Bibliotheken und dergleichen zu nutzen, können Sie ein einfaches Makefile wie das folgende verwenden:

default:
    avr-g++ -L/usr/arduino/lib -I/usr/arduino/include -Wall -DF_CPU=16000000UL -Os -mmcu=atmega328p -o main.elf main.c -larduino
    avr-objcopy -O ihex -R .eeprom main.elf out.hex
upload:
    avrdude -c arduino -p m328p -b 57600 -P /dev/ttyUSB0 -U flash:w:out.hex

all: default upload

Wenn Sie versuchen, die Bibliotheken in zu kompilieren libraries/, wird ein Linkerfehler angezeigt, wenn Sie die Dinge nicht in der richtigen Reihenfolge ausführen. Zum Beispiel musste ich dies tun, um SoftwareSerial zu verwenden:

    avr-g++ -L/usr/arduino/lib -I/usr/arduino/include -Wall -DF_CPU=16000000UL -Os -mmcu=atmega328p -o main.elf main.c -lSoftwareSerial -larduino

Dies -larduinomuss die letzte Bibliothek in der Befehlszeile sein

Auf jeden Fall war dies eine ziemlich einfache Möglichkeit, es für mich zu kompilieren. Wenn zukünftige Versionen des Ardunio herauskommen, sollte dieses Makefile ziemlich zukunftssicher sein und nur wenige Änderungen an OBJS und HDRS erfordern. Außerdem sollte dieses Makefile sowohl mit BSD make als auch mit GNU make funktionieren

Siehe auch eine leicht modifizierte Version dieser Antwort in meinem Blog mit einer bereits kompilierten Binärdatei der Bibliothek (kompiliert mit dem "Standard" pins_arduino.h).


** BEARBEITEN **

Ich fand heraus, dass das Hinzufügen der folgenden Compiler-Optimierungsflags sowohl zum Makefile der Bibliothekserstellung als auch zu jedem einzelnen Projekt-Makefile die Größe der endgültigen kompilierten Binärdatei erheblich reduziert. Dies macht die endgültige Binärgröße vergleichbar mit der der IDE.

-Wl,--gc-sections -ffunction-sections  -fdata-sections  

.

Also, für das Makefile zum Erstellen der Bibliothek:

CFLAGS = -I./ -std=gnu99  -DF_CPU=16000000UL -Os -Wl,--gc-sections -ffunction-sections  -fdata-sections -mmcu=atmega328p
CPPFLAGS = -I./ -DF_CPU=16000000UL -Os -Wl,--gc-sections -ffunction-sections  -fdata-sections -mmcu=atmega328p

und für jedes Projekt-Makefile:

avr-g++ -L/usr/arduino/lib -I/usr/arduino/include -Wall -DF_CPU=16000000UL -Os -Wl,--gc-sections -ffunction-sections  -fdata-sections -mmcu=atmega328p -o main.elf main.c -larduino

.

Ref: http://arduino.cc/forum/index.php?topic=153186.0

Earlz
quelle
3

Wenn Sie bereit sind, die Arduino-IDE einmal (oder einmal pro Gerätetyp) zu verwenden, ist dies der einfachste Weg, eine statische Bibliothek zu erstellen und die Bibliotheksquellen abzurufen. Danach können Sie die für Sie geeigneten Entwicklungstools verwenden.

In diesem Arduino-Artikel (geschrieben für Benutzer, die zur Eclipse-IDE wechseln) wird das Erstellen der Arduino-Bibliothek beschrieben, indem eine Skizze mit der Arduino-IDE erstellt und die Bibliothek aus dem temporären Verzeichnis von Arduino abgerufen wird. Scrollen Sie etwa 1/4 der Seite nach unten zum Abschnitt

  1. Kopieren der Bibliothek aus einem Arduino IDE-Projekt
JRobert
quelle
0

Wenn Sie nur ein Build-System benötigen, das auch Ihren Mikrocontroller-Programmierer steuern kann, ist platformio Ihr Freund.

Luke Skywalker
quelle