Понимание процесса компиляции/связывания/загрузки (поэтому мне не нужно использовать IDE)
Я начал играть с arduino UNO и arduino совсем недавно (без какого-либо предварительного опыта работы с микроконтроллерами). Я хотел бы использовать emacs вместо IDE, и я также хотел бы знать, что IDE делает под капотом, чтобы иметь возможность написать свой собственный файл makefile. Учебные пособия, которые я нашел, либо устарели, либо представлены в виде серии шагов без каких-либо объяснений. Я был бы признателен, если бы кто-нибудь объяснил мне, как работает весь процесс согласования/связывания/загрузки с использованием gcc-avr и avr-dude и как он используется в среде разработки.
@Ash, 👍11
Обсуждение2 ответа
Лучший ответ:
Если вы хотите получить точное дублирование того, что делает IDE, но хотите, чтобы оно управлялось из командной строки, для этого Ино. Полный процесс сборки Arduino включает в себя копирование большого количества файлов из разных мест, и, как правило, дублирование не является тривиальным.
Если вы готовы отказаться от файлов .ino и библиотек Arduino, вы получаете гораздо более простой набор инструментов. avr-gcc компилирует, загружает avrdude, и все готово. Вот один из моих файлов создания из простого проекта:
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()? В таком случае, где мне следует искать их простые эквиваленты на языке Си?, @Ash
Библиотеки Arduino будут содержать их эквиваленты, но они могут быть немного эрудированными для чтения. Я рекомендую найти низкоуровневый учебник AVR для работы, в котором вам будут объяснены различные регистры и периферийные устройства. О, и технические данные. **Всегда** получайте данные., @Ignacio Vazquez-Abrams
Вот краткий обзор процесса компиляции Arduino для таких людей, как я, которые нашли это сообщение во время охоты за ним:
Процесс компиляции
Код arduino на самом деле представляет собой обычный старый c без всей заголовочной части (включает и все). когда вы нажимаете кнопку "компиляция", IDE сохраняет текущий файл как arduino.c в каталоге "lib/build", а затем вызывает файл makefile, содержащийся в каталоге "lib".
Это позволит скопировать файл arduino.c как prog.c в 'lib/tmp', добавив 'wiringlite.inc" как начало этого. эта операция превращает код arduino/проводки в правильный файл c (называемый prog.c).
После этого он копирует все файлы из каталога 'core' в 'lib/tmp'. эти файлы являются реализацией различных команд arduino/проводки, добавляемых в эти файлы, добавляет команды на язык
Основные файлы поддерживаются программой procyon avr-lib Паскаля станга, которая содержится в каталоге 'lib/avrlib
На данный момент код, содержащийся в lib/tmp, готов к компиляции с помощью компилятора c, содержащегося в разделе "инструменты". Если операция make пройдет успешно, то у вас будет prog.hex, готовый для загрузки в процессор.
https://www.arduino.cc/en/Main/Documentation
- Поддерживают ли чипы ATMega 328/2560 JTAG-программатор и аппаратный отладчик?
- AVRdude неправильно считывает значения байтов предохранителя
- avr-g++ (или avr-gcc) и библиотека LiquidCrystal
- avrdude ser_open() can't set com-state
- Не удается снова загрузиться после смены платы
- Ошибка компиляции кода для Arduino/Genuino Uno
- Доступ запрещен при загрузке
- Существуют ли альтернативы схемам Tinkercad, основанным на ПК-приложениях, а не на веб-приложениях?
Вы можете заглянуть под капот, нажав "Показать подробный вывод во время: ☑ компиляции ☑ загрузки" в разделе Файл → Настройки., @jippie
Почти дубликат: Компиляция кода через терминал. Смотрите ссылки на arduino-builder и файл Makefile Судара Муту в моем ответе на этот вопрос., @Edgar Bonet
Вы можете использовать Emacs в сочетании с PlatformIO. См. Также мой ответ на связанный с этим вопрос. Я использую
--ide vim
при инициализации проекта в моем примере, но эта команда также поддерживает emacs., @maxschlepzig