программирование ардуино на чистом с

Я пытаюсь прошить чистый 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 мигает, т.е. соединение между компьютером и усилителем идеальное. плата

, 👍2

Обсуждение

Одно замечание: -DF_CPU=1000000UL равно 1 МГц. Я почти уверен, что Arduino Mega2560 работает на частоте 16 МГц. В любом случае, вы можете попробовать использовать PlatformIO CLI (я использую его на машине с Linux, и он отлично работает с несколькими разными Arduino), @KIIV

@KIIV, даже @ 16Mhz, та же проблема. есть идеи, как обойтись без PlatformIO CLI?, @sankar

Попробуйте добавить к команде avrdude префикс stty -F /dev/ttyACM3 hupcl &&, @Majenko


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


-2

Я пытаюсь прошить чистый c-код

Вы не можете прошить какой-либо C-код на любую Arduino, чистую или не чистую. Arduino принимает только двоичный код.

при этом компилятор arduino способен преобразовывать любой чистый C-код в двоичный до такой степени, что вы можете писать чистый C-код.

Поэтому, если у вас есть цепочка инструментов Arduino, у вас в основном есть все необходимые инструменты для написания чистого C-кода.

,