Избегать 10 попыток Avrdude, когда программатор не отвечает

Иногда я обновляю свой скетч в среде Arduino, и когда я нажимаю на стрелку переноса, но забываю подключить arduino (я использую UART в своем проекте, поэтому каждый раз, когда мне нужно подключить/отсоединить некоторые провода), это драма, avrdude бросает это как минимум на 2 минуты :

avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x32

Это настоящая боль, потому что я не могу остановить avrdude, когда это происходит. Есть ли способ настроить среду Arduino, чтобы отключить ее?

, 👍6

Обсуждение

Хороший вопрос, я думал, что это будет легко исправить, но ничего не смог найти в параметрах командной строки AVRDude (http://www.nongnu.org/avrdude/user-manual/avrdude_4.html) или конфигурационные файлы avrdude., @Paul

В Linux я просто открываю терминал и набираю "killall avrdude", и он останавливает его..., @Majenko

Я не думал об этом, хорошая работа вокруг да около., @aqwa

Кроме того, я использую UECIDE, а не Arduino IDE, потому что я специально запрограммировал кнопку "стоп", чтобы обойти эту проблему., @Majenko


2 ответа


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

1

К сожалению, MAX_SYNC_ATTEMPTS-это константа в исходном коде, которая появляется несколько раз.

avrdude-это проект с открытым исходным кодом, поэтому его настройка и создание должны быть относительно простыми. Поскольку это числовое, а не строковое значение, и оно проверяется в нескольких местах, простое изменение двоичного файла, скорее всего, будет сложным.

Конечно, можно вручную убить процесс, хотя это раздражает.

Другой подход может заключаться в написании оболочки, которая потенциально может сначала выполнить некоторую проверку здравомыслия (есть ли у какого-либо другого процесса открытый порт?), А затем запустить avrdude в качестве своего дочернего элемента, передавая все аргументы. Контролируя вывод перед его передачей, можно обнаружить это сообщение и автоматически завершить экземпляр avrdude.

,

0

У меня был тот же вопрос,и я нашел следующее решение в linux: написать скрипт,

#!/bin/bash
avrdude=`ps -C avrdude | tail -n 1 | head -c 7`
kill $avrdude

сохраните его и соедините с помощью ярлыка

,