Zrozumienie procesu kompilacji / łączenia / przesyłania (więc nie muszę używać IDE)


10

Zacząłem grać z arduino UNO całkiem niedawno (bez wcześniejszego doświadczenia z mikrokontrolerami). Chciałbym używać emacsa zamiast IDE, a także chciałbym wiedzieć, co robi IDE pod maską, aby móc napisać własny plik makefile. Samouczki, które znalazłem, są albo nieaktualne, albo przedstawione jako seria kroków bez żadnego wyjaśnienia. Byłbym wdzięczny, gdyby ktoś mógł mi wyjaśnić, jak działa cały proces kompilacji / łączenia / wysyłania za pomocą gcc-avr i avr-dude oraz w jaki sposób jest on wykorzystywany przez IDE.


5
Możesz zajrzeć pod maską, pokazując „Pokaż pełne dane wyjściowe podczas: ☑ kompilacji ☑ wysyłania” W obszarze Plik → Preferencje.
jippie

Prawie duplikat: Kompilowanie kodu przez terminal . Zobacz linki do arduino-buildera i Sudar Muthu 'Makefile w mojej odpowiedzi na to pytanie.
Edgar Bonet

Odpowiedzi:


12

Jeśli chcesz dokładnego powielenia tego, co robi IDE, ale chcesz, aby był sterowany z wiersza poleceń, właśnie do tego służy Ino . Pełny proces kompilacji Arduino polega na kopiowaniu wielu plików z wielu miejsc i zwykle nie jest trywialny do powielenia.

Jeśli jesteś gotowy puścić pliki .ino i biblioteki Arduino, otrzymasz znacznie prostszy zestaw narzędzi. avr-gcc kompiluje, avrdude uploads i gotowe. Oto jeden z moich plików makefile z prostego projektu:

CC=avr-gcc
CXX=avr-c++
CXXFLAGS=-Wall -Wextra -mmcu=atmega1284p -Os
CFLAGS=$(CXXFLAGS)
BINARY=ledmatrix
OBJECTS=

all: $(BINARY)
@avr-size $<

$(BINARY): $(OBJECTS)

clean:
@rm -f $(BINARY) $(BINARY).hex $(OBJECTS)

upload: $(BINARY).hex
@avrdude -c usbasp -p m1284p -U flash:w:$<:i

%.hex: %
@avr-objcopy -j .text -j .data -O ihex $< $@

.PHONY: all clean upload

W przypadku kopiowania i wklejania pamiętaj o zastąpieniu wszystkich znaków „↹” znakami tabulacji.

EDYTOWAĆ:

Utworzyłem repozytorium z moim systemem kompilacji na Github .


Dzięki, twój plik makefile jest prawie tym, co próbowałem wymyślić. Ale wydaje mi się, że pozbycie się bibliotek oznacza, że ​​nie będę mógł korzystać z funkcji takich jak digitalWrite ()? W takim przypadku, gdzie powinienem szukać ich zwykłych odpowiedników w języku C?
Ash

1
Biblioteki Arduino zawierają ich odpowiedniki, ale mogą być nieco erudycyjne do czytania. Polecam znalezienie samouczka AVR niskiego poziomu do omówienia, który objaśni ci różne rejestry i urządzenia peryferyjne. Aha, i arkusz danych. Zawsze otrzymuj arkusz danych.
Ignacio Vazquez-Abrams
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.