Как создать и загрузить программу на C++ без библиотеки Arduino или IDE?

Примечание. Это справочный вопрос (но не стесняйтесь писать свои ответы!)


Я хочу использовать инструменты AVR напрямую — без arduino-builder или arduino-cli. Я также хотел бы, чтобы компиляция и загрузка происходили как можно быстрее

, 👍1

Обсуждение

Как быстро? Можете ли вы поставить метрику на это? Загрузка обязательно требует времени, потому что она использует последовательную связь. Компиляция после запуска из среды IDE, скорее всего, будет такой же быстрой, как если бы вы вводили ее в командной строке. Конечно, мы все хотели бы, чтобы это было быстрее, чем сейчас. Но ваше требование быть «быстрым» довольно неконкретно., @Nick Gammon

О, я вижу, это справочный вопрос. В этом случае см.: https://arduinoprosto.ru/q/15893/how-to-compile-upload-and-monitor-via-the-linux-command-line/15898#15898, @Nick Gammon


1 ответ


Лучший ответ:

2
  1. Создайте новый файл с именем Makefile в каталоге вашего проекта. Заполните его следующим содержимым:
TEMPDIR := $(shell mktemp -d)

all:
    avr-g++ -DF_CPU=<CLK> -mmcu=<PARTNO> -fno-threadsafe-statics -O3 -flto -std=c++23 -isystem/usr/avr/include -lm -fuse-linker-plugin -Wl,--gc-sections *.cpp -o ${TEMPDIR}/a.elf

    avr-objcopy -O ihex -R .eeprom ${TEMPDIR}/a.elf ${TEMPDIR}/a.hex
    avrdude -V -p<PARTNO> -carduino -P/dev/tty<SERIAL_PORT> -b<BAUD> -D -Uflash:w:${TEMPDIR}/a.hex

    rm ${TEMPDIR}/a.elf ${TEMPDIR}/a.hex
    rm -d ${TEMPDIR}
  1. В Arduino IDE нажмите Ctrl+, и включите подробный вывод во время компиляции и загрузки.
  2. Начните загрузку, нажав Ctrl+U. Замените группы угловых скобок в Makefile (например, <CLK>) значениями в выходных данных сборки Arduino IDE.
  3. Запустите make.
Ссылки

-lm в математической библиотеке AVR. *.cpp относится к исходным файлам C++. -V запрещает avrdude считывать содержимое флеш-памяти и проверять его, что экономит время, но вы можете отключить его на время диагностики проблем.

,

Чтобы найти похожее, но более общее решение, вы можете взглянуть на [Makefile Sudar Muthu] (https://github.com/sudar/Arduino-Makefile). Если вы не используете основную библиотеку Arduino, вы можете удалить много лишнего из командной строки g++., @Edgar Bonet

Проверка подписи и проверка прошитого приложения — важные функции безопасности, я рекомендую сохранить их, чтобы избежать долгих часов поиска ошибок., @the busybee

@busybee Исправлено, спасибо, @glibg10b

@edgar Я только что понял, что «много хлама» относится к моему ответу, а не к Makefile Судара Мутху. Исправлено, спасибо :), @glibg10b

Вы можете значительно улучшить свой ответ, если добавите объяснения, почему каждый шаг необходим и какой вклад он вносит в процесс. Например, я упускаю из виду, что промежуточный шаг с Arduino IDE предназначен только для поиска некоторых приличных значений для часов и MCU, которые также можно было бы ввести вручную, поскольку вы выбрали их в IDE ранее. -- Отличный ответ будет также рассуждать о каждой опции каждого инструмента. Тем более, что вы новичок, вам нужно узнать, что важно, а что нет. В настоящее время это всего лишь один из возможных способов без дополнительной информации для неосведомленных пользователей., @the busybee