Где параметры avrdude определяются в Arduino IDE?
Мне интересно узнать, как Arduino IDE обрабатывает параметры, чтобы правильно загружать шестнадцатеричные файлы с помощью avrdude.
Я нашел это в boards.txt:
uno.name=Arduino/Genuino Uno
uno.vid.0=0x2341
uno.pid.0=0x0043
uno.vid.1=0x2341
uno.pid.1=0x0001
uno.vid.2=0x2A03
uno.pid.2=0x0043
uno.vid.3=0x2341
uno.pid.3=0x0243
uno.upload.tool=avrdude
uno.upload.protocol=arduino
uno.upload.maximum_size=32256
uno.upload.maximum_data_size=2048
uno.upload.speed=115200
uno.bootloader.tool=avrdude
uno.bootloader.low_fuses=0xFF
uno.bootloader.high_fuses=0xDE
uno.bootloader.extended_fuses=0x05
uno.bootloader.unlock_bits=0x3F
uno.bootloader.lock_bits=0x0F
uno.bootloader.file=optiboot/optiboot_atmega328.hex
uno.build.mcu=atmega328p
uno.build.f_cpu=16000000L
uno.build.board=AVR_UNO
uno.build.core=arduino
uno.build.variant=standard
Есть это в platform.txt:
# AVR Uploader/Programmers tools
# ------------------------------
tools.avrdude.path={runtime.tools.avrdude.path}
tools.avrdude.cmd.path={path}/bin/avrdude
tools.avrdude.config.path={path}/etc/avrdude.conf
tools.avrdude.upload.params.verbose=-v
tools.avrdude.upload.params.quiet=-q -q
tools.avrdude.upload.pattern="{cmd.path}" "-C{config.path}" {upload.verbose} -p{build.mcu} -c{upload.protocol} -P{serial.port} -b{upload.speed} -D "-Uflash:w:{build.path}/{build.project_name}.hex:i"
tools.avrdude.program.params.verbose=-v
tools.avrdude.program.params.quiet=-q -q
tools.avrdude.program.pattern="{cmd.path}" "-C{config.path}" {program.verbose} -p{build.mcu} -c{protocol} {program.extra_params} "-Uflash:w:{build.path}/{build.project_name}.hex:i"
tools.avrdude.erase.params.verbose=-v
tools.avrdude.erase.params.quiet=-q -q
tools.avrdude.erase.pattern="{cmd.path}" "-C{config.path}" {erase.verbose} -p{build.mcu} -c{protocol} {program.extra_params} -e -Ulock:w:{bootloader.unlock_bits}:m -Uefuse:w:{bootloader.extended_fuses}:m -Uhfuse:w:{bootloader.high_fuses}:m -Ulfuse:w:{bootloader.low_fuses}:m
tools.avrdude.bootloader.params.verbose=-v
tools.avrdude.bootloader.params.quiet=-q -q
tools.avrdude.bootloader.pattern="{cmd.path}" "-C{config.path}" {bootloader.verbose} -p{build.mcu} -c{protocol} {program.extra_params} "-Uflash:w:{runtime.platform.path}/bootloaders/{bootloader.file}:i" -Ulock:w:{bootloader.lock_bits}:m
Эта строка особенно интересна:
tools.avrdude.upload.pattern="{cmd.path}" "-C{config.path}" {upload.verbose} -p{build.mcu} -c{upload.protocol} -P{serial.port} -b{upload.speed} -D "-Uflash:w:{build.path}/{build.project_name}.hex:i"
Похоже, что эти переменные соответствуют:
{cmd.path} --> tools.avrdude.cmd.path
{config.path} --> tools.avrdude.config.path
{upload.verbose} --> tools.avrdude.upload.params.verbose
{build.mcu} --> uno.build.mcu
{upload.protocol} --> uno.upload.protocol
{serial.port} --> ?
{upload.speed} --> uno.upload.speed
{build.path} --> ?
{build.project_name} --> ?
Похоже, что они, скорее всего, используются в Java-коде для IDE. Очевидно, есть несколько вещей, в которых я не уверен. Я бы предположил, что это считается пользовательским вводом в IDE. Хотя я ни в коем случае не являюсь программистом Java или JavaScript.
Где эти переменные явно определены в библиотеке Arduino? (например, {runtime.tools.avrdude.path}
, {path}
, {cmd.path}
...) Или как они определяются IDE?
@wgwz, 👍1
Обсуждение2 ответа
Библиотека Arduino-это то, что работает на цели, в то время как "IDE" (не уверен, что его все еще можно назвать IDE, так как теперь они пытаются сделать и командную строку) - это все остальное.
Но у меня сложилось впечатление, что если вы готовы задать такой вопрос, вы можете отказаться от IDE и перейти к более стандартному подходу Makefile. Или, может быть, Eclipse, где у вас все еще есть IDE, но вы можете определить все более стандартным способом.
Подход Arduino хорош для того, чтобы начать работу с людьми с небольшим опытом, но через некоторое время вы начали чувствовать его ограничения.
Я использовал подход makefile. Поэтому теперь мне интересно узнать, как и где определяются параметры, которые отправляются в avrdude. Более конкретно, переменные, участвующие в " tools.avrdude.upload.pattern`., @wgwz
Не уверен, что понимаю вас. Вы хотите знать, как вызвать avrdude, реплицируя то, что делает IDE?, @Igor Stoppa
Я хочу знать, как выбрать параметры, которые должны быть отправлены в программу avrdude для данного типа платы. Я нашел, где находятся флаги " settools.avrdude.upload.pattern`. Я не уверен в том, как они установлены. Пожалуйста, посмотрите блок в моем посте со стрелками, обозначающими "соответствующий". Все переменные с префиксом *uno*, я понимаю, откуда берутся эти значения (*boards.txt*). Но переменные с префиксом *tools* и метками *?* я не уверен в том, где они определены. Я хотел бы знать, где они определены., @wgwz
Ладно, виноват, мне следовало задать открытый вопрос. Следующая попытка: чего вы пытаетесь достичь с помощью этого? Почему вы хотите это знать?, @Igor Stoppa
Я хочу знать это, потому что хочу обернуть библиотеку Arduino C для использования с Python. Я хочу знать это, потому что это часть дизайна того, как будет работать оболочка, то есть процесс загрузки., @wgwz
Я немного сбит с толку. Библиотека Arduino C, AFAIK, - это то, что компилируется для цели (в основном AVR). Затем существует java (afaik) реализация IDE, которая опирается на различные инструменты, такие как avr-gcc и avrdude. Если вы хотите их использовать, почему бы просто не выполнить их из python? Как вы, должно быть, видели, они работают даже из Makefile., @Igor Stoppa
Я понимаю, что могу выполнить из Python, но я хочу обернуть библиотеку Arduino. Я хочу иметь возможность писать на Python, а не просто компилировать его, например: Blink.py нет Blink.cpp., @wgwz
Я сделал свою долю привязок python для библиотек C, но они всегда полагаются на то, что интерпретатор python работает на цели. Это просто невозможно на базовом AVR, таком как 328p. Самое близкое, что вы можете получить, - это с https://wiki.python.org/moin/PyMite но он кажется заброшенным. Или пойти на целенаправленную реализацию, как https://www.kickstarter.com/projects/214379695/micro-python-python-for-microcontrollers/posts/1198333. Конечно, вы можете достичь python-подобного синтаксиса с большой работой над парсером/компилятором, но это уже другая история., @Igor Stoppa
Я хочу использовать Cython для преобразования *Arduino.h* в *Arduino.so*, поэтому я могу импортировать Arduino
в скрипт Python. На данный момент я думаю, что затем я выведу *cpp* из скрипта Python, который затем скомпилируется и загрузится с помощью команды upload., @wgwz
Давайте [продолжим это обсуждение в чате](http://chat.stackexchange.com/rooms/31026/discussion-between-igor-stoppa-and-skywalker)., @Igor Stoppa
Есть 3(или 4) места, на которые вам нужно посмотреть, чтобы узнать, как загрузить файл.
Существует boards.txt файл и platform.txt файл.
Вы можете рассмотреть platform.txt строка файла
tools.avrdude.path={runtime.tools.avrdude.path}
как (в linux в windows заменить ${xx} на %xx%)
set tools.avrdude.path ${runtime.tools.avrdude.path}
и в board.txt для выбранной платы, как
uno.bootloader.tool=avrdude
как
set bootloader.tool avrdude
Arduino ide использует следующую строку, чтобы узнать переменную среды команды upload
tools.${bootloader.tool}.upload.pattern
Таким образом, он знает, что команда для загрузки
"{cmd.path}" "-C{config.path}" {upload.verbose} -p{build.mcu} -c{upload.protocol} -P{serial.port} -b{upload.speed} -D "-Uflash:w:{build.path}/{build.project_name}.hex:i"
{cmd.path} жестко закодирован как tools.${bootloader.tool}.cmd.path, который равен {path}/bin/avrdude
где {path} следует понимать как tools.${bootloader.tool}.путь, который равен {runtime.tools.avrdude.path}.
{runtime.tools.avrdude.path} определяется boardsmanager на основе файла json и местоположения, из которого boardsmanager извлек загрузку.
Таким образом, получается 3 файла: boards.txt, platform.txt и json-файл, и какое-то жесткое кодирование.
4-й файл вступает в игру, когда вы используете "другие команды загрузки". Они расположены в programmers.txt файл.
IMHO Arduino IDE core team не выбрала самое простое решение для определения этих вещей. Они также время от времени меняют способ своей работы.
Если вы используете makefile, знайте, что многие люди уже сделали это, так что может быть хорошей идеей "повторно использовать работу других людей" вместо того, чтобы "изобретать велосипед". Это не так просто или прямолинейно.
Примечания Я знаю все это, потому что я реализовал Arduino eclipse IDE. Насколько мне известно, ничего из этого не задокументировано.
- avrdude: ошибка проверки, первое несоответствие в байте 0x0000 : 0x00 != 0x16 с использованием USBasp
- Невозможно загрузить скетчс помощью Platformio (но Arduino IDE работает)
- Избегать 10 попыток Avrdude, когда программатор не отвечает
- Проблема с загрузкой Arduino Mega
- "avrdude: stk500_getsync(): not in sync: resp=0x00", или некто по имени Avr не позволяет мне загрузить мою программу
- avrdude ser_open() can't set com-state
- Wire.h не найден!
- Нет заголовочных файлов (.h) в Documents\Arduino\libraries\arduino_144469 с демонстрационным кодом
где я могу найти, Boards.txt Platform.txt programmers.txt файл. Я использую - Mac Mojave 10.14.6 Arduino iDE - 1.8.12 Когда я запускаю код регистратора данных (для сохранения на SD-карте) Я получаю ошибку /Users/placidafernando/Library/Caches/Homebrew. Я переустановил Brew и Avrdude. I. вижу, что он установлен под, когда я смотрю через терминал. Не удается увидеть с MAC apple man /Users/myUserID/Library/Caches/Homebrew, но мой скетч и Arduino находятся в /Documents libraries Следующее сообщение связано с тем, что IDE или Arduino-CLI не могут оштрафовать файл avrdude.tar в текущем каталоге? Я не являюсь пользователем big mac. Как я могу установить путь, @Shaun Christian Fernando
@ShaunChristianFernando вы, вероятно, должны просто задать свой собственный вопрос., @wgwz