Как создать и загрузить программу на C++ без библиотеки Arduino или IDE?
Примечание. Это справочный вопрос (но не стесняйтесь писать свои ответы!)
Я хочу использовать инструменты AVR напрямую — без arduino-builder или arduino-cli. Я также хотел бы, чтобы компиляция и загрузка происходили как можно быстрее
@glibg10b, 👍1
Обсуждение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}
- В Arduino IDE нажмите Ctrl+, и включите подробный вывод во время компиляции и загрузки.
- Начните загрузку, нажав Ctrl+U. Замените группы угловых скобок в Makefile (например,
<CLK>
) значениями в выходных данных сборки Arduino IDE. - Запустите
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
- программирование ардуино на чистом с
- AVRdude неправильно считывает значения байтов предохранителя
- Как передать нестатический член класса для обратного вызова на платформах avr?
- Используйте Arduino Uno для программирования встроенной Atmega328 на C
- AVR-GCC не может вызвать функцию, расположенную по фиксированному адресу
- avr-gcc -D игнорируется
- Поддерживают ли чипы ATMega 328/2560 JTAG-программатор и аппаратный отладчик?
- Поскольку double и float представляют один и тот же тип данных (обычно), что предпочтительнее?
Как быстро? Можете ли вы поставить метрику на это? Загрузка обязательно требует времени, потому что она использует последовательную связь. Компиляция после запуска из среды IDE, скорее всего, будет такой же быстрой, как если бы вы вводили ее в командной строке. Конечно, мы все хотели бы, чтобы это было быстрее, чем сейчас. Но ваше требование быть «быстрым» довольно неконкретно., @Nick Gammon
О, я вижу, это справочный вопрос. В этом случае см.: https://arduinoprosto.ru/q/15893/how-to-compile-upload-and-monitor-via-the-linux-command-line/15898#15898, @Nick Gammon