программирование ардуино на чистом с
Я пытаюсь прошить чистый c-код на плату Arduino Mega2560 из Linux, используя avr-gcc & авродуде. Компиляция завершена, теперь пытаюсь прошить с помощью avr-dude, получаю ошибку вида "avrdude: stk500_recv(): программатор не отвечает avrdude: stk500_getsync() попытка 1 из 10: не синхронизировано: resp=0x00"
Я использовал команду ниже для создания шестнадцатеричного файла
avr-gcc -mmcu=atmega2560 -DF_CPU=16000000UL led.c -o led.elf
В файле, включенном из led.c:3:0: /usr/lib/avr/include/util/delay.h:95:3: предупреждение: #warning "Оптимизация компилятора отключена; функции не будут работать должным образом" [-Wcpp] # предупреждение "Оптимизация компилятора отключена; функции из не будут работать должным образом"
А потом
avr-objcopy -j .text -O ihex led.elf led.hex
наконец для перепрошивки
avrdude -F -V -c arduino -p ATMEGA2560 -P /dev/ttyACM3 -b 115200 -U flash:w:led.hex
Для справки: порт указан правильно & Контакт RX мигает, т.е. соединение между компьютером и усилителем идеальное. плата
@sankar, 👍2
Обсуждение2 ответа
Лучший ответ:
В файле, включенном из led.c:3:0: /usr/lib/avr/include/util/delay.h:95:3: предупреждение: #предупреждение "Компилятор оптимизация отключена; функции не будут работать должным образом"
Вы должны начать с исправления этого. Просто добавьте -Os
в компилятор
командная строка. Это означает «оптимизировать размер» и является стандартным
опция оптимизации, используемая с ардуино.
avr-objcopy -j .text -O ihex led.elf led.hex
Если ваша копия avrdude была скомпилирована с помощью libelf (например, с Ubuntu есть), вам это не нужно: вы можете передать свой файл elf напрямую к avrdude.
avrdude -F -V -c arduino -p ATMEGA2560 -P /dev/ttyACM3 -b 115200 -U flash:w:led.hex
-F
указывает avrdude не проверять подпись устройства. -V
говорит об этом
не проверять загрузку. Я бы не использовал ни один из этих вариантов, если только
У меня была очень веская причина сделать это. -c arduino
неверен: он выбирает
протокол загрузки, используемый Optiboot (используется, например, в Uno).
Mega 2560 использует другой загрузчик, основанный на «разводке»
протокол. Я бы также добавил параметр -D
(отключить автоматическое стирание), потому что
Я видел, что Arduino IDE использует его, и потому, что без этой опции я получаю
ошибка:
avrdude: erasing chip
avrdude: stk500v2_command(): command failed
В итоге команда загрузки выглядит примерно так:
avrdude -p atmega2560 -c wiring -P /dev/ttyACM3 -b 115200 -D -U led.elf
Спасибо ! это работает. ваше объяснение понятно. Я новичок в avr, не могли бы вы указать мне, где научиться всему этому? @Эдгар Боне, @sankar
@sankar: у меня нет подходящей подходящей ссылки для этого. Я научился этому на собственном горьком опыте, посмотрев, как это делают Arduino IDE и Makefile Sudar Muthu (https://github.com/sudar/Arduino-Makefile), и прочитав справочную страницу avrdude., @Edgar Bonet
Я пытаюсь прошить чистый c-код
Вы не можете прошить какой-либо C-код на любую Arduino, чистую или не чистую. Arduino принимает только двоичный код.
при этом компилятор arduino способен преобразовывать любой чистый C-код в двоичный до такой степени, что вы можете писать чистый C-код.
Поэтому, если у вас есть цепочка инструментов Arduino, у вас в основном есть все необходимые инструменты для написания чистого C-кода.
- Как создать и загрузить программу на C++ без библиотеки Arduino или IDE?
- AVRdude неправильно считывает значения байтов предохранителя
- Как передать нестатический член класса для обратного вызова на платформах avr?
- Используйте Arduino Uno для программирования встроенной Atmega328 на C
- AVR-GCC не может вызвать функцию, расположенную по фиксированному адресу
- avr-gcc -D игнорируется
- Поддерживают ли чипы ATMega 328/2560 JTAG-программатор и аппаратный отладчик?
- Поскольку double и float представляют один и тот же тип данных (обычно), что предпочтительнее?
Одно замечание:
-DF_CPU=1000000UL
равно 1 МГц. Я почти уверен, что Arduino Mega2560 работает на частоте 16 МГц. В любом случае, вы можете попробовать использовать PlatformIO CLI (я использую его на машине с Linux, и он отлично работает с несколькими разными Arduino), @KIIV@KIIV, даже @ 16Mhz, та же проблема. есть идеи, как обойтись без PlatformIO CLI?, @sankar
Попробуйте добавить к команде
avrdude
префиксstty -F /dev/ttyACM3 hupcl &&
, @Majenko