Как загрузить уже скомпилированный код, когда никаких изменений не производилось?
Как использовать Arduino IDE для загрузки последнего скомпилированного кода? Я не хочу ждать 2 минуты, чтобы загрузить скомпилированный код, когда нет никаких изменений. Это большая кодовая база, в которую я часто вношу одно или два небольших изменения, и у меня возникают проблемы с моим MCU или кабелями USB. Часто контроллер на моих платах повреждается из-за перегрузки по току из-за высокой температуры при 3D-печати. Так что ждать лишние 2-5 минут каждый раз, когда я экспериментирую с этим, неприемлемо.
Очевидно, что для этого есть сочетание клавиш, о котором я не знаю. Потому что в противном случае это увеличило бы время разработки.
Пожалуйста, скажите мне, как я могу заставить Arduino-IDE просто «загружать без компиляции» мой скетч.
@steve antwan, 👍3
Обсуждение2 ответа
Лучший ответ:
Вы можете загрузить шестнадцатеричный файл на плату из командной строки без Arduino IDE.
Чтобы получить шестнадцатеричный файл, используйте в Arduino IDE в меню команду «Экспортировать скомпилированный двоичный файл». Hex-файл будет сохранен рядом с ino-файлом.
Я предполагаю, что ваша плата в принтере имеет микроконтроллер AVR. Затем вы можете использовать avrdude из командной строки, чтобы снова и снова загружать шестнадцатеричный файл без какой-либо компиляции.
Команда avrdude в Windows (при запуске из папки скетча):
%LOCALAPPDATA%\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/bin/avrdude -C%LOCALAPPDATA%\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf -v -patmega328p -carduino -PCOM11 -b115200 -D -Uflash:w:Blink.ino.hex:i
Командная строка предназначена для скетча Blink и пакета плат AVC 1.6.21
Это то, что я сделал. На панели настроек IDE Arduino включите параметр «Показывать подробный вывод во время компиляции и загрузки». Таким образом, всякий раз, когда вы выполняете проверку и загрузку, вы можете видеть все команды, которые выполнил Arduino. Теперь после того, как вы нажмете «Проверить» или «Загрузить», вы можете скопировать последнюю команду перед загрузкой, например
"/Users/fang/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude" "-C/Users/fang/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf" -v -V -patmega32u4 -cavr109 "-P/dev/cu.usbmodem21101" -b57600 -D "-Uflash:w:/private/var/folders/xb/4609zdjx4tn3bv_6jh2nym_r0000gn/T/arduino/sketches/7972D54945A751059BF3114D2057C2B6/sketch_aug4c.ino.hex:iquot;
Теперь, когда вам нужно загрузить без повторной компиляции, просто вставьте эту строку в Терминал, все остальное он сделает за вас. По сути, вы можете видеть, что Arduino IDE — это всего лишь оболочка этих команд.
Обновление:
Я также нашел другой способ, немного другой, но более эффективный. Если вы используете код Visual Studio, вы также можете попробовать плагин PlatformIO, который может компилировать и загружать код отдельно. Я написал об этом статью здесь, https://windmaomao.medium.com/use-platformio-to-write-arduino-code-3c957c4e58b5
- ESP32 в Arduino IDE: определите тип платы в коде (макрос препроцессора)
- Что мне делать с StackOverflow при ошибке компиляции?
- Как заставить Arduino IDE использовать определенную версию GCC в Debian?
- Как иметь в проекте код, который не будет компилироваться для Arduino?
- Как делегировать компиляцию кода на удаленную машину?
- Условная компиляция в зависимости от sizeof(double)
- Беспричинное создание `Serial`, почему?
- В чем разница между Tools > Board settings в Arduino IDE? пример: ESP32-Dev против Huzzah32
Какую версию Arduino IDE вы используете? Раньше это был хлам, но в более поздних версиях лучше кэшируется скомпилированный код. В качестве альтернативы [UECIDE](https://uecide.org) имеет гораздо лучшее кэширование, чем Arduino IDE, и из-за этого перекомпиляция выполняется намного быстрее., @Majenko
вы можете найти bin-файл компиляции в своей временной папке, а затем использовать другой инструмент загрузки (или OTA), чтобы отправить его., @dandavis
@Majko: ссылка на UECIDE выше, похоже, не указывает туда, куда она должна указывать; возможно, заменить на https://github.com/UECIDE/UECIDE?, @ocrdu