Comprendre le processus de compilation / liaison / téléchargement (donc je n'ai pas besoin d'utiliser l'IDE)

10

J'ai commencé à jouer avec et arduino UNO assez récemment (sans aucune expérience préalable avec les micro-contrôleurs). Je voudrais utiliser emacs au lieu de l'IDE, et j'aimerais aussi savoir ce que l'IDE fait sous le capot, afin de pouvoir écrire mon propre makefile. Les tutoriels que j'ai trouvés sont obsolètes ou sont présentés comme une série d'étapes sans aucune explication. J'apprécierais que quelqu'un m'explique comment fonctionne le processus de compliation / liaison / téléchargement en utilisant gcc-avr et avr-dude, et comment il est utilisé par l'IDE.

Cendre
la source
5
Vous pouvez jeter un œil sous le capot en "Afficher la sortie verbeuse pendant: ☑ la compilation ☑ le téléchargement" sous Fichier → Préférences.
jippie
Presque en double: compilation du code via le terminal . Voir les liens vers Arduino-builder et Sudar Muthu 'Makefile dans ma réponse à cette question.
Edgar Bonet

Réponses:

12

Si vous voulez une duplication exacte de ce que fait l'EDI mais que vous voulez qu'il soit piloté à partir de la ligne de commande, c'est à cela qu'Ino est destiné. Le processus complet de construction d'Arduino implique la copie d'un grand nombre de fichiers à partir de nombreux endroits, et il n'est généralement pas facile à dupliquer.

Si vous êtes prêt à abandonner les fichiers .ino et les bibliothèques Arduino, vous obtenez un ensemble d'outils beaucoup plus simple. avr-gcc compile, télécharge avrdude, et vous avez terminé. Voici l'un de mes makefiles à partir d'un projet simple:

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

Si vous copiez et collez, assurez-vous de remplacer tous les «↹» par des caractères de tabulation.

ÉDITER:

J'ai créé un référentiel avec mon buildsystem sur Github .

Ignacio Vazquez-Abrams
la source
Merci, votre makefile est à peu près ce que j'essayais de trouver. Mais je suppose que se débarrasser des bibliothèques signifie que je ne pourrai pas utiliser des fonctions telles que digitalWrite ()? Dans ce cas, où dois-je chercher pour connaître leurs équivalents C simples?
Ash
1
Les bibliothèques Arduino contiendraient leurs équivalents, mais elles peuvent être un peu érudites à lire. Je recommande de trouver un tutoriel AVR de bas niveau pour travailler qui vous expliquera les différents registres et périphériques. Oh, et la fiche technique. Obtenez toujours la fiche technique.
Ignacio Vazquez-Abrams