Jak kompilovat, nahrávat a sledovat pomocí příkazového řádku Linuxu?

Rozhraní Arduino Uno (nahrávání atd.) s Arduino IDE (pomocí balíčku Fedora) funguje dobře pod Fedorou 21.

Ale raději chci použít vim + make + vim-quickfix-mode atd.

Jak to mohu udělat?

Nejlépe pomocí nástrojů dostupných z repozitářů Fedory.

Předpokládám, že IDE volá externí nástroje příkazového řádku pro nahrávání atd.

Ekvivalent sériového monitoru IDE pravděpodobně připojuje emulátor terminálu (např. screen) to /dev/ttyACM0, že?

Možná existuje dobrý příklad projektu, na který se lze podívat na makefile?

Odpověď

Navrhoval bych Googling pro projekty Makefile. Udělal jsem jednu chvíli zpět pro program Blink, protože jsem v podstatě viděl, co se vygenerovalo IDE a replikovalo se to obecněji.

# # 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 

Budete muset alespoň změnit ARDUINO_DIR přednáška, kde jste nainstalovali IDE. Pokud používáte jiné věci, jako je knihovna Wire, budete ji muset trochu rozšířit a zkompilovat další knihovny. K provedení změn můžete opět použít to, co si IDE generuje samo.

Řádky s úvodními mezerami výše by potřebovaly kartu místo mezer, což je u Makefile obvyklé.

Komentáře

  • Nahraná sekce v souboru make by užitečné také nahrát zkompilovaný náčrt na arduino (pomocí avr-vole).
  • To by bylo určitě užitečné. Jelikož však IDE zatím splnilo mé potřeby pro kompilaci a nahrávání, nejsem silně motivován, abych zjistil, jak to udělat. 🙂
  • Podívejte se na metamorfní odpověď pro snazší řešení

odpověď

Používám rozhraní příkazového řádku k příkazu arduino .

Spustím to jako toto:

arduino --upload sketch/sketch.ino --port /dev/ttyUSB* 

Existuje stránka , která popisuje další nástroje příkazového řádku, například inotool. Tato stránka má také příklad Makefile. Tyto alternativy se zdají lákavé, ale zdá se, že v době psaní tohoto článku žádná z nich nefunguje. Předpokládám, že je to kvůli některým nedávným změnám v distribučních souborech Arduino IDE, na kterých závisí.

Spuštění arduino jak je uvedeno výše, je trochu pomalé, protože musí načíst Java myslím, ale alespoň to funguje. K dispozici je také příkaz arduino-builder , který je dodáván s Distribuce IDE Arduino. V době psaní tohoto dokumentu nebylo dostatečně zdokumentováno, abych mohl přijít na to, jak jej používat. Například v souboru README nebo v žádném z výukových programů, na které jsem narazil, neexistují žádné ukázkové příkazové řádky, a nemohl jsem přijít na to, jak jej použít k nahrání kódu na desku. Pravděpodobně je však schopen nám poskytnout rychlejší kompilaci než arduino. Soubor README také zmiňuje možnost opětovného použití objektových souborů z předchozí kompilace, takže existuje několik funkcí podobného vzhledu.


Zobrazení sériového výstupu Používám něco jako

stty -F /dev/ttyUSB* 1000000 raw -clocal -echo cat /dev/ttyUSB* 

Číslo 1000000 by se mělo shodovat s číslem, které předáte Serial.begin() v kód vaší desky. Můžete také použít screen, pokud máte palubní program, který je vhodně interaktivní, nebo můžete použít jakýkoli nástroj k přímému zápisu do zařízení. Mimochodem, moje splatnost se zobrazuje jako /dev/ttyACM0 (spíše než /dev/ttyUSB0 pro Uno).

Komentáře

  • Ujistěte se, že máte v adresáři jeden soubor *.ino, protože se nezdá, že nutně nahraje soubor uvedený v --upload parametr.
  • Nebyla nastavena žádná proměnná DISPLAY X11, ale tento program provedl operaci, která to vyžaduje. Pro mě

Odpověď

Co potřebujete, je Makefile. Pro Arduino existuje několik projektů Makefile. Googling pro soubor „Arduino Makefile“ vrací mnoho výsledků, včetně toho, co na Github vypadá jako dobrý: https://github.com/sudar/Arduino-Makefile

Kompilace z příkazového řádku není triviální kvůli způsobu, jakým IDE Arduino zachází s knihovnami.

Ekvivalent k sériovému IDE monitor pravděpodobně připojuje emulátor terminálu (např. obrazovku) k / dev / ttyACM0, že?

Pro sériový monitor bych doporučil minicom. Jedná se o plně funkční emulátor terminálu (vt102) na příkazovém řádku.

minicom -D /dev/ttyACM0 -b 115200 

… například.

Komentáře

Odpověď

Oficiální nástroj CLI

Tým Arduino vyvíjí cli klient https://github.com/arduino/arduino-cli

Oznámení : https://blog.arduino.cc/2018/08/24/announcing-the-arduino-command-line-interface-cli/

S tím můžete dělat téměř vše, od stahování desek a knihoven, až po kompilaci a nahrávání skriptů. Co chybí, je monitorovací část (můžete použít metamorfní metodu pomocí stty cat, Funguje to!)

Příkazy jsou velmi podobné Metamorfní“ odpovědi , protože tento nástroj je rozvětvený z toho

Pokyny v Github repo a manuálové stránce:

 $ arduino-cli Arduino Command Line Interface (arduino-cli). Usage: arduino-cli [command] Examples: arduino <command> [flags...] Available Commands: board Arduino board commands. compile Compiles Arduino sketches. config Arduino Configuration Commands. core Arduino Core operations. help Help about any command lib Arduino commands about libraries. sketch Arduino CLI Sketch Commands. upload Upload Arduino sketches. version Shows version number of Arduino CLI. 

Odpověď

Pokud chcete plně kompatibilní řešení pro svůj projekt arduino (ano, můžete svůj projekt sdílet s dalšími lidmi, kteří používají Prostě Arduino IDE) musíte zkontrolovat amake nástroj pro zjednodušení cli arduina, používám ho s Geany, ale ostatní ho používají s vi, Atom atd.

Je to inspirováno a nyní mrtvé projekty Ino a Arturo; věnujte prosím 5 minut otestování a poskytněte nám zpětnou vazbu.

Příklad použití:

cd ~/Arduino/Blink/ [move to your arduino project folder] amake -v uno Blink.ino [to compile/verify your code] amake -u uno Blink.ino /dev/ttyUSB0 [to upload your code to an arduino connected via USB] 

Má tam nějaké chytré lepidlo, to pamatuje si tabuli a složku a dokonce automaticky detekuje usb desky; takže po úspěšném příkazu „amake -v“ to můžete udělat na příkazovém řádku a bude to fungovat.

amake -v [to compile/verify your code] amake -u [to upload your code to an arduino connected via USB] 

Pokud používáte některá IDE makra, můžete snadno sestavte příkazy pro kompilaci a nahrání, například pomocí Geany IDE se to stane:

  • Kompilace / ověření: cd% d; amake -v uno% f
  • Nahrát: cd% d; amake -u uno% f

Další pomoc se spuštěním pouze „amake“ nebo „amake -h“ získáte po instalaci.

Také může podporovat KAŽDOU desku / lib / programátor, kterou jste nainstalovali / nakonfigurovali ve svém Arduino IDE, ano, moderní desku jako Adafuit Trinket M0 / Arduino M0 atd …

Stačí vypálit vaše Arduino IDE, přejít na správce desky, nainstalovat podporu a to je vše, postupujte podle několika jednoduchých pokynů a vaše jsou nastaveny.

Board nemáte není podporován? není problém, detekujte fqbn (přečtěte si soubor README.md) a předejte jej jako název desky.

Hledám testery, aby vyrostli počet nebo deska aliasy a automatická detekce správných podpisů USB.

Pamatujte, že toto je soukromý dospělý nástroj, nyní sdílený s veřejností, víte, jen programátor, který to škrábe …

Na zdraví.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *