Compreendendo o processo de compilação / vinculação / upload (para que eu não precise usar o IDE)

10

Comecei a brincar com o arduino UNO recentemente (sem nenhuma experiência anterior com microcontroladores). Gostaria de usar o emacs em vez do IDE, e também gostaria de saber o que o IDE faz sob o capô, para poder escrever meu próprio makefile. Os tutoriais que encontrei estão desatualizados ou são apresentados como uma série de etapas sem nenhuma explicação. Eu apreciaria se alguém pudesse me explicar como todo o processo de compliação / vinculação / upload funciona usando gcc-avr e avr-dude e como é usado pelo IDE.

Cinza
fonte
5
Você pode dar uma olhada nos bastidores em "Mostrar saída detalhada durante:: compilação ☑ carregar" Em Arquivo → Preferências.
jippie
Quase duplicado: Compilando código via terminal . Veja os links para o arduino-builder e o Sudar Muthu 'Makefile na minha resposta a essa pergunta.
Edgar Bonet 31/03

Respostas:

12

Se você deseja uma duplicação exata do que o IDE faz, mas deseja que seja direcionado a partir da linha de comando, é para isso que serve o Ino . O processo completo de compilação do Arduino envolve a cópia de muitos arquivos de vários lugares e geralmente não é trivial duplicar.

Se você estiver pronto para liberar arquivos .ino e as bibliotecas do Arduino, terá um conjunto de ferramentas muito mais simples. compilações avr-gcc, envios avrdude e pronto. Aqui está um dos meus makefiles de um projeto simples:

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

Se copiar e colar, substitua todos os "↹" pelos caracteres de tabulação.

EDITAR:

Eu criei um repositório com o meu sistema de construção no Github .

Ignacio Vazquez-Abrams
fonte
Obrigado, seu makefile é basicamente o que eu estava tentando criar. Mas eu acho que me livrar das bibliotecas significa que não poderei usar funções como digitalWrite ()? Nesse caso, onde devo procurar aprender seus equivalentes C simples?
27714 Ash
1
As bibliotecas do Arduino conteriam seus equivalentes, mas podem ser um pouco eruditas de ler. Eu recomendo encontrar um tutorial de AVR de baixo nível que explique os vários registros e periféricos. Ah, e a folha de dados. Sempre obtenha a folha de dados.
Ignacio Vazquez-Abrams