Понимание процесса компиляции / компоновки / загрузки (поэтому мне не нужно использовать IDE)

10

Я начал играть с Arduino UNO совсем недавно (без какого-либо опыта работы с микроконтроллерами). Я хотел бы использовать emacs вместо IDE, и я также хотел бы знать, что IDE делает под капотом, чтобы иметь возможность написать свой собственный make-файл. Учебники, которые я нашел, либо устарели, либо представлены в виде последовательности шагов без каких-либо объяснений. Я был бы признателен, если бы кто-нибудь мог объяснить мне, как весь процесс компиляции / компоновки / загрузки работает с использованием gcc-avr и avr-dude, и как он используется в IDE.

ясень
источник
5
Вы можете заглянуть под капот: «Показать подробный вывод во время: ☑ компиляции ☑ загрузки» в разделе «Файл» → «Настройки».
Джиппи
Почти дубликат: компилирование кода через терминал . Смотрите ссылки на Arduino-Builder и Makear-файл Sudar Muthu в моем ответе на этот вопрос.
Эдгар Бонет

Ответы:

12

Если вы хотите точно продублировать то, что делает IDE, но хотите, чтобы она выводилась из командной строки, то для этого и нужен Ino . Полный процесс сборки Arduino включает в себя копирование большого количества файлов из разных мест, и, как правило, его нетрудно дублировать.

Если вы готовы отказаться от файлов .ino и библиотек Arduino, вы получите гораздо более простой набор инструментов. avr-gcc компилирует, загружает avrdude, и все готово. Вот один из моих make-файлов из простого проекта:

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

При копировании и вставке обязательно замените все символы «↹» на символы табуляции.

РЕДАКТИРОВАТЬ:

Я создал репозиторий с моей системой сборки на Github .

Игнасио Васкес-Абрамс
источник
Спасибо, твой make-файл - это почти то, что я пытался придумать. Но я думаю, избавление от библиотек означает, что я не смогу использовать такие функции, как digitalWrite ()? В таком случае, где я должен искать их простые эквиваленты C?
Эш
1
Библиотеки Arduino будут содержать свои эквиваленты, но их может быть немного эрудированно читать. Я рекомендую найти низкоуровневое руководство по AVR, которое объяснит вам различные регистры и периферийные устройства. Ох, и таблицы. Всегда получайте данные.
Игнасио Васкес-Абрамс