Comprender el proceso de compilación / enlace / carga (por lo que no tengo que usar el IDE)

10

Recientemente comencé a jugar con arduino UNO (sin ninguna experiencia previa con microcontroladores). Me gustaría usar emacs en lugar del IDE, y también me gustaría saber qué hace el IDE debajo del capó, para poder escribir mi propio archivo MAKE. Los tutoriales que he encontrado están desactualizados o se presentan como una serie de pasos sin ninguna explicación. Agradecería que alguien me explicara cómo funciona todo el proceso de compilación / enlace / carga utilizando gcc-avr y avr-dude, y cómo lo utiliza el IDE.

Ceniza
fuente
55
Puede echar un vistazo bajo el capó "Mostrar resultados detallados durante: ☑ compilación ☑ subir" en Archivo → Preferencias.
jippie
Casi duplicado: compilando código a través de la terminal . Vea los enlaces a arduino-builder y Sudar Muthu 'Makefile en mi respuesta a esa pregunta.
Edgar Bonet

Respuestas:

12

Si desea una duplicación exacta de lo que hace el IDE pero quiere que se maneje desde la línea de comando, para eso está Ino . El proceso completo de compilación de Arduino implica copiar muchos archivos de muchos lugares, y generalmente no es trivial duplicarlos.

Si está listo para soltar los archivos .ino y las bibliotecas Arduino, obtendrá un conjunto de herramientas mucho más simple. compila avr-gcc, carga avrdude y listo. Aquí está uno de mis makefiles de un proyecto 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 está copiando y pegando, asegúrese de reemplazar todos los "tab" con caracteres de tabulación.

EDITAR:

He creado un repositorio con mi sistema de compilación en Github .

Ignacio Vazquez-Abrams
fuente
Gracias, su makefile es más o menos lo que estaba tratando de inventar. Pero supongo que deshacerse de las bibliotecas significa que no podré usar funciones como digitalWrite (). En ese caso, ¿dónde debo mirar para aprender sus equivalentes en C simples?
Ash
1
Las bibliotecas Arduino contendrían sus equivalentes, pero pueden ser un poco eruditas para leer. Recomiendo encontrar un tutorial AVR de bajo nivel para trabajar que le explique los diferentes registros y periféricos. Ah, y la hoja de datos. Siempre obtenga la hoja de datos.
Ignacio Vazquez-Abrams