Ich würde vorschlagen, für Makefile-Projekte zu googeln. Ich habe es vor einiger Zeit für das Programm Blink gemacht, indem ich im Grunde gesehen habe, was von der IDE generiert wurde, und das auf eine allgemeinere Art und Weise repliziert habe.
#
# Simple Arduino Makefile
#
# Author: Nick Gammon
# Date: 18th March 2015
# where you installed the Arduino app
ARDUINO_DIR = C:/Documents and Settings/Nick/Desktop/arduino-1.0.6/
# various programs
CC = "$(ARDUINO_DIR)hardware/tools/avr/bin/avr-gcc"
CPP = "$(ARDUINO_DIR)hardware/tools/avr/bin/avr-g++"
AR = "$(ARDUINO_DIR)hardware/tools/avr/bin/avr-ar"
OBJ_COPY = "$(ARDUINO_DIR)hardware/tools/avr/bin/avr-objcopy"
MAIN_SKETCH = Blink.cpp
# compile flags for g++ and gcc
# may need to change these
F_CPU = 16000000
MCU = atmega328p
# compile flags
GENERAL_FLAGS = -c -g -Os -Wall -ffunction-sections -fdata-sections -mmcu=$(MCU) -DF_CPU=$(F_CPU)L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=106
CPP_FLAGS = $(GENERAL_FLAGS) -fno-exceptions
CC_FLAGS = $(GENERAL_FLAGS)
# location of include files
INCLUDE_FILES = "-I$(ARDUINO_DIR)hardware/arduino/cores/arduino" "-I$(ARDUINO_DIR)hardware/arduino/variants/standard"
# library sources
LIBRARY_DIR = "$(ARDUINO_DIR)hardware/arduino/cores/arduino/"
build:
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(MAIN_SKETCH) -o $(MAIN_SKETCH).o
$(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)avr-libc/malloc.c -o malloc.c.o
$(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)avr-libc/realloc.c -o realloc.c.o
$(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)WInterrupts.c -o WInterrupts.c.o
$(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)wiring.c -o wiring.c.o
$(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)wiring_analog.c -o wiring_analog.c.o
$(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)wiring_digital.c -o wiring_digital.c.o
$(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)wiring_pulse.c -o wiring_pulse.c.o
$(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)wiring_shift.c -o wiring_shift.c.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)CDC.cpp -o CDC.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)HardwareSerial.cpp -o HardwareSerial.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)HID.cpp -o HID.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)IPAddress.cpp -o IPAddress.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)main.cpp -o main.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)new.cpp -o new.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)Print.cpp -o Print.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)Stream.cpp -o Stream.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)Tone.cpp -o Tone.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)USBCore.cpp -o USBCore.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)WMath.cpp -o WMath.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)WString.cpp -o WString.cpp.o
rm core.a
$(AR) rcs core.a malloc.c.o
$(AR) rcs core.a realloc.c.o
$(AR) rcs core.a WInterrupts.c.o
$(AR) rcs core.a wiring.c.o
$(AR) rcs core.a wiring_analog.c.o
$(AR) rcs core.a wiring_digital.c.o
$(AR) rcs core.a wiring_pulse.c.o
$(AR) rcs core.a wiring_shift.c.o
$(AR) rcs core.a CDC.cpp.o
$(AR) rcs core.a HardwareSerial.cpp.o
$(AR) rcs core.a HID.cpp.o
$(AR) rcs core.a IPAddress.cpp.o
$(AR) rcs core.a main.cpp.o
$(AR) rcs core.a new.cpp.o
$(AR) rcs core.a Print.cpp.o
$(AR) rcs core.a Stream.cpp.o
$(AR) rcs core.a Tone.cpp.o
$(AR) rcs core.a USBCore.cpp.o
$(AR) rcs core.a WMath.cpp.o
$(AR) rcs core.a WString.cpp.o
$(CC) -Os -Wl,--gc-sections -mmcu=$(MCU) -o $(MAIN_SKETCH).elf $(MAIN_SKETCH).o core.a -lm
$(OBJ_COPY) -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 $(MAIN_SKETCH).elf $(MAIN_SKETCH).eep
$(OBJ_COPY) -O ihex -R .eeprom $(MAIN_SKETCH).elf $(MAIN_SKETCH).hex
Sie müssten ARDUINO_DIR
zumindest ändern , um zu berücksichtigen, wo Sie die IDE installiert haben. Wenn Sie andere Dinge wie die Wire-Bibliothek verwenden, müssen Sie sie etwas erweitern, um zusätzliche Bibliotheken zu kompilieren. Auch hier können Sie das verwenden, was die IDE selbst generiert, um Ihre Änderungen zu steuern.
Die Zeilen mit den führenden Leerzeichen benötigen das Tabulatorzeichen anstelle von Leerzeichen, wie es für ein Makefile üblich ist.
Ich benutze die Befehlszeilenschnittstelle für den
arduino
Befehl .Ich führe es so aus:
Es gibt eine Seite, auf der andere Befehlszeilentools wie beschrieben werden
inotool
. Diese Seite hat auch ein BeispielMakefile
. Diese Alternativen scheinen verlockend zu sein, aber anscheinend funktioniert zum jetzigen Zeitpunkt keine von ihnen. Ich gehe davon aus, dass dies auf einige kürzlich vorgenommene Änderungen in den Arduino IDE-Distributionsdateien zurückzuführen ist, von denen sie abhängen.Das Laufen
arduino
wie oben ist etwas langsam, weil es Java laden muss, aber zumindest funktioniert es. Es gibt auch einenarduino-builder
Befehl, der mit der Arduino IDE-Distribution geliefert wird. Zum Zeitpunkt des Schreibens war es nicht ausreichend dokumentiert, um herauszufinden, wie ich es verwenden soll. Zum Beispiel gibt es keine Beispielbefehlszeilen in der README-Datei oder in einem der Tutorials, auf die ich gestoßen bin, und ich konnte nicht herausfinden, wie man damit Code auf das Board hochlädt. Vermutlich ist es uns jedoch möglich, schneller zu kompilieren alsarduino
. In der README-Datei wird auch darauf hingewiesen, dass Objektdateien aus einer früheren Kompilierung wiederverwendet werden können.Zum Anzeigen der seriellen Ausgabe verwende ich so etwas wie
Die Nummer 1000000 sollte mit der Nummer übereinstimmen, die Sie
Serial.begin()
in Ihrem Kartencode übergeben. Sie können auchscreen
ein Board-Programm verwenden, das entsprechend interaktiv ist, oder Sie können ein beliebiges Hilfsprogramm verwenden, um direkt auf das Gerät zu schreiben. Übrigens, mein Due erscheint als/dev/ttyACM0
(und nicht/dev/ttyUSB0
für die Uno).quelle
*.ino
Datei im Verzeichnis haben, da diese nicht unbedingt die vom--upload
Parameter angegebene Datei hochzuladen scheint .Was Sie brauchen, ist ein Makefile. Es gibt einige Makefile-Projekte für Arduino. Das Googeln nach "Arduino Makefile" liefert viele Ergebnisse, einschließlich derjenigen, die auf Github gut aussehen: https://github.com/sudar/Arduino-Makefile
Das Kompilieren über die Befehlszeile ist nicht einfach, da die Arduino IDE Bibliotheken verarbeitet.
Für den seriellen Monitor würde ich minicom empfehlen. Es ist ein voll funktionsfähiger Terminalemulator (vt102) in der Befehlszeile.
... zum Beispiel.
quelle
Wenn Sie eine vollständig kompatible Lösung für Ihr Arduino-Projekt möchten (ja, Sie können Ihr Projekt mit anderen Personen teilen, die nur eine einfache Arduino-IDE verwenden), müssen Sie ein Tool auswählen , um die Benutzeroberfläche des Arduino zu vereinfachen. Ich verwende es jedoch mit Geany andere benutzen es mit vi, Atom, etc.
Es ist inspiriert und die mittlerweile toten Ino- und Arturo-Projekte; Bitte nehmen Sie sich 5 Minuten Zeit, um es zu testen und geben Sie uns Feedback.
Beispiel Verwendung:
Es hat einen intelligenten Klebstoff, es kann sich an die Platine und die Datei erinnern und sogar den USB-Anschluss der Platine automatisch erkennen. Nach einem erfolgreichen "amake -v" -Befehl können Sie dies in der Befehlszeile tun und es wird funktionieren.
Wenn Sie einige IDE-Makros verwenden, können Sie die Kompilierungs- und Upload-Befehle einfach erstellen, beispielsweise mit Geany IDE:
Sie können mehr Hilfe bekommen, wenn Sie "amake" oder "amake -h" einmal installiert haben.
Außerdem kann es JEDES Board / jede Bibliothek / jeden Programmierer unterstützen, die / den Sie in Ihrer Arduino IDE installiert / konfiguriert haben, ja, modernes Board wie das Adafuit Trinket M0 / Arduino M0 usw.
Feuern Sie einfach Ihre Arduino IDE, gehen Sie zum Board Manager, installieren Sie Support und das ist alles. Folgen Sie einfach ein paar einfachen Anweisungen und schon sind Sie fertig.
Das Board, das Sie haben, wird nicht unterstützt? Kein Problem, erkennen Sie den fqbn (lesen Sie die README.md-Datei) und geben Sie ihn als Board-Namen weiter.
Ich bin auf der Suche nach Testern, um die Anzahl der Board-Aliase und die automatische Erkennung der richtigen USB-Signaturen zu erhöhen.
Denken Sie daran, dies ist ein privat gewachsenes Werkzeug, das jetzt der Öffentlichkeit zur Verfügung gestellt wird. Es ist nur ein Programmierer, der sich am Juckreiz kratzt ...
Prost.
quelle
Offizielles CLI-Tool
Das Arduino-Team entwickelt einen Cli- Client https://github.com/arduino/arduino-cli
Ankündigung : https://blog.arduino.cc/2018/08/24/announcing-the-arduino-command-line-interface-cli/
Sie können damit fast alles tun, vom Herunterladen von Boards und Bibliotheken bis zum Kompilieren und Hochladen von Skripten. Was fehlt, ist der Überwachungsteil (Sie können die Methode von Metamorphic verwenden
stty
cat
, es funktioniert!)Die Befehle sind der Antwort von Metamorphic sehr ähnlich, da sich dieses Tool aus diesem heraus verzweigt
Anleitung im Github-Repo und in der Manpage:
quelle