Где параметры 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?

, 👍1

Обсуждение

где я могу найти, 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


2 ответа


-1

Библиотека 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


1

Есть 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. Насколько мне известно, ничего из этого не задокументировано.

,