Использование директив из boards.txt

gonzales
Offline
Зарегистрирован: 13.07.2015

Доброго времени суток. Может кто знает, можно ли использовать директивы предпроцессора из boards.txt в скетче, то есть я например создаю меню menu.boardver, у которого 2 значения, и хотел бы использовать выбранное значение для компиляции внутри скетча по типу #ifdef .... #elif... #endif
Заранее спасибо

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

видимо да...

#pragma GCC optimize ("-Ofast")

 

b707
Offline
Зарегистрирован: 26.05.2017

Можно, смотрите boards.txt, в ней полно примеров.

Komandir
Offline
Зарегистрирован: 18.08.2018

ua6em не срабатывает - надо править platform.txt или попробовать убрать -O... из platform.txt и может тогда сработает из скетча

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Komandir пишет:

ua6em не срабатывает - надо править platform.txt или попробовать убрать -O... из platform.txt и может тогда сработает из скетча

у меня на ESP8266 и ESP32 работает...

PS я не настоящий сталевар, пользуюсь готовым сплавом "железо-углерод"

Komandir
Offline
Зарегистрирован: 18.08.2018

Оно работает для строк скетча, но библиотеки не затрагивает и код wiring. Как то так ... 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Komandir пишет:

Оно работает для строк скетча, но библиотеки не затрагивает и код wiring. Как то так ... 

это я не разобрался, что ему надо...только не понял, к чему усложнять, когда можно просто

gonzales
Offline
Зарегистрирован: 13.07.2015

что-то я так и не понял, так можно или нет?)))

Вот допустим вот такой кусок кода в boards.txt

# See: http://code.google.com/p/arduino/wiki/Platforms

menu.cpu=Processor
menu.BOOT=BOOT options


optiboot32.name=Optiboot on 32-pin cpus

optiboot32.upload.tool=arduino:avrdude
optiboot32.upload.protocol=arduino
optiboot32.upload.speed=38400
optiboot32.bootloader.tool=arduino:avrdude
optiboot32.bootloader.low_fuses=0xFF
optiboot32.bootloader.unlock_bits=0x3F
optiboot32.bootloader.lock_bits=0x2F
optiboot32.build.f_cpu=16000000L
optiboot32.build.board=AVR_UNO
optiboot32.build.core=arduino:arduino
optiboot32.build.variant=arduino:eightanaloginputs
optiboot32.upload.maximum_size=32256
optiboot32.upload.maximum_data_size=2048
optiboot32.bootloader.high_fuses=0xD6
optiboot32.bootloader.extended_fuses=0x05
##optiboot32.bootloader.file=optiboot/optiboot_atmega328.hex
optiboot32.build.mcu=atmega328p
optiboot32.menu.BOOT.optiboot_v2=v2
optiboot32.menu.BOOT.optiboot_v2.bootloader.file=optiboot/optiboot_atmega328_v2.hex
optiboot32.menu.BOOT.optiboot_v3=v3
optiboot32.menu.BOOT.optiboot_v3.bootloader.file=optiboot/optiboot_atmega328_v3.hex

как в скетче использовать выбранное значение в меню BOOT?

Komandir
Offline
Зарегистрирован: 18.08.2018

Вы более широко можете раскрыть свою идею ? Мне например не ясно - для каких целей оно вам понадобилось ?!

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

gonzales пишет:

что-то я так и не понял, так можно или нет?)))

Вот допустим вот такой кусок кода в boards.txt

# See: http://code.google.com/p/arduino/wiki/Platforms

menu.cpu=Processor
menu.BOOT=BOOT options


optiboot32.name=Optiboot on 32-pin cpus

optiboot32.upload.tool=arduino:avrdude
optiboot32.upload.protocol=arduino
optiboot32.upload.speed=38400
optiboot32.bootloader.tool=arduino:avrdude
optiboot32.bootloader.low_fuses=0xFF
optiboot32.bootloader.unlock_bits=0x3F
optiboot32.bootloader.lock_bits=0x2F
optiboot32.build.f_cpu=16000000L
optiboot32.build.board=AVR_UNO
optiboot32.build.core=arduino:arduino
optiboot32.build.variant=arduino:eightanaloginputs
optiboot32.upload.maximum_size=32256
optiboot32.upload.maximum_data_size=2048
optiboot32.bootloader.high_fuses=0xD6
optiboot32.bootloader.extended_fuses=0x05
##optiboot32.bootloader.file=optiboot/optiboot_atmega328.hex
optiboot32.build.mcu=atmega328p
optiboot32.menu.BOOT.optiboot_v2=v2
optiboot32.menu.BOOT.optiboot_v2.bootloader.file=optiboot/optiboot_atmega328_v2.hex
optiboot32.menu.BOOT.optiboot_v3=v3
optiboot32.menu.BOOT.optiboot_v3.bootloader.file=optiboot/optiboot_atmega328_v3.hex

как в скетче использовать выбранное значение в меню BOOT?

:)))))

Конечно можно!

Если меньше всего переписывать в ИДЕ, то нужно использовать build.boad.

ИДЕ определяет макрос ARDUINO_{build.board}, то есть в твоем случае  компилятору будет передано ARDUINO_AVR_UNO, и его можно проверить на #ifdef.

В меню задавай нужные тебе значения в build.board например: AVR_UNO1, AVR_UNO2 ... и так далее по аналогии. То есть в твоем примере убери строку 17  и задавай build.board в  меню, два раза - разное, после 26 и 28 строк соответственно.

В коде скетча проверяй на #ifdef:

#ifdef ARDUINO_UNO1
// *****  code for 1
#endif

#ifdef ARDUINO_UNO2
// ***** code for 2
#endif

Ну вот, как-то так. Понял?

gonzales
Offline
Зарегистрирован: 13.07.2015

wdrakula пишет:

Ну вот, как-то так. Понял?

Да, конечно. Спасибо большое за разъяснение!!! 

А где-то можно узнать этот список используемых в IDE макросов ARDUINO_{}? 

 

gonzales
Offline
Зарегистрирован: 13.07.2015

Komandir пишет:

Вы более широко можете раскрыть свою идею ? Мне например не ясно - для каких целей оно вам понадобилось ?!

У меня несколько версий плат, имеющих разную разводку и разные загрузчики. Скетч естественно один, имеющий вариативность в виде #ifdef. Соответственно, чтобы сделать прошивку под правильную плату, нужно не забыть выбрать тип загрузчика и правильно сконфигурировать константы #define. Иногда в запаре забывал что-нибудь из этого выставить, потом долго удивлялся, почему не работает. Возникла мысль, что можно использовать настройки из boards для автоматической модификации скечта.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

gonzales пишет:

wdrakula пишет:

Ну вот, как-то так. Понял?

Да, конечно. Спасибо большое за разъяснение!!! 

А где-то можно узнать этот список используемых в IDE макросов ARDUINO_{}? 

 

Ты не понял ничего? ТЫ САМ ЭТО ПИШЕШЬ В МЕНЮ! Если так - непонятно, я еще крупнее шрифт возьму! Должно помочь. Ай хоуп.

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

gonzales пишет:

 Возникла мысль, что можно использовать настройки из boards для автоматической модификации скечта.

ЫСЧО РАС: boards.txt придеццо переписывать. По крайней мене добавлять пару строк. В них ты и определяешь макрос. Я указал тебе, как сделать с минимальным переписыванием.

То, что  передается компилятору можно увидеть в паттернах в платформ.тхт.

Green
Онлайн
Зарегистрирован: 01.10.2015

Ещё можно на чип привязываться и даже на оскал (капитализма).)

gonzales
Offline
Зарегистрирован: 13.07.2015

wdrakula пишет:

Ты не понял ничего? 

Да все я понял)))

optiboot32.menu.BOOT.optiboot_v0=v0
optiboot32.menu.BOOT.optiboot_v0.bootloader.file=optiboot/optiboot_atmega328_v2.hex
optiboot32.menu.BOOT.optiboot_v0.build.board=AVR_UNO0
optiboot32.menu.BOOT.optiboot_v2=v2
optiboot32.menu.BOOT.optiboot_v2.bootloader.file=optiboot/optiboot_atmega328_v2.hex
optiboot32.menu.BOOT.optiboot_v2.build.board=AVR_UNO2
optiboot32.menu.BOOT.optiboot_v3=v3
optiboot32.menu.BOOT.optiboot_v3.build.board=AVR_UNO3
optiboot32.menu.BOOT.optiboot_v3.bootloader.file=optiboot/optiboot_atmega328_v3.hex
optiboot32.menu.BOOT.optiboot_v4=v4
optiboot32.menu.BOOT.optiboot_v4.build.board=AVR_UNO4
optiboot32.menu.BOOT.optiboot_v4.bootloader.file=optiboot/optiboot_atmega328_v3.hex

Вот рабочий вариант.

Я спросил о другом, для общего развития, есть ли другие константы, чтобы использовать другие опции, например upload.speed, что-нибудь типа UPLOAD_SPEED_38400

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

gonzales пишет:

wdrakula пишет:

Ты не понял ничего? 

Да все я понял)))

optiboot32.menu.BOOT.optiboot_v0=v0
optiboot32.menu.BOOT.optiboot_v0.bootloader.file=optiboot/optiboot_atmega328_v2.hex
optiboot32.menu.BOOT.optiboot_v0.build.board=AVR_UNO0
optiboot32.menu.BOOT.optiboot_v2=v2
optiboot32.menu.BOOT.optiboot_v2.bootloader.file=optiboot/optiboot_atmega328_v2.hex
optiboot32.menu.BOOT.optiboot_v2.build.board=AVR_UNO2
optiboot32.menu.BOOT.optiboot_v3=v3
optiboot32.menu.BOOT.optiboot_v3.build.board=AVR_UNO3
optiboot32.menu.BOOT.optiboot_v3.bootloader.file=optiboot/optiboot_atmega328_v3.hex
optiboot32.menu.BOOT.optiboot_v4=v4
optiboot32.menu.BOOT.optiboot_v4.build.board=AVR_UNO4
optiboot32.menu.BOOT.optiboot_v4.bootloader.file=optiboot/optiboot_atmega328_v3.hex

Вот рабочий вариант.

Я спросил о другом, для общего развития, есть ли другие константы, чтобы использовать другие опции, например upload.speed, что-нибудь типа UPLOAD_SPEED_38400

Хочешь что-то еще - переписывай паттерны. ИДЕ вообще нормально так документирована. У меня где-то на форуме есть тема, как к ИДЕ на Яве плагины писать. Она (ИДЕ) пластилиновая совершенно. Но нужно хорошо писать код на Яве. хорошо понимать устройство компилятора  GCC, и вообще систему.

Тогда можно будет сделать все, что угодно. И не терять свои настройки при апдейте среды. Но придется собирать всё от исходников. Многим просто не интересно это всё.

gonzales
Offline
Зарегистрирован: 13.07.2015

wdrakula пишет:

Хочешь что-то еще - переписывай паттерны. ИДЕ вообще нормально так документирована. У меня где-то на форуме есть тема, как к ИДЕ на Яве плагины писать. Она (ИДЕ) пластилиновая совершенно. Но нужно хорошо писать код на Яве. хорошо понимать устройство компилятора  GCC, и вообще систему.

Тогда можно будет сделать все, что угодно. И не терять свои настройки при апдейте среды. Но придется собирать всё от исходников. Многим просто не интересно это всё.

Понял. Спасибо

vrd
Offline
Зарегистрирован: 20.01.2022

Лень двигатель прогресса. Никто ведь не мешает сохранить два раза один и тот же скетч. Поменять индентификаторы и пользоваться как есть.

Если есть желание добавить новую фишку - написать в первом скетче и если всё заработает просто скопировать во второй. А так есть возможность испортить прошивку для обоих устройств одновременно.

Сам один раз столкнулся с подобным и теперь храню всё раздельно. Даже если в скетче изменено только имя ОТА.

Green
Онлайн
Зарегистрирован: 01.10.2015

vrd пишет:

Лень двигатель прогресса. Никто ведь не мешает сохранить два раза один и тот же скетч. Поменять индентификаторы и пользоваться как есть.

Лень двигатель прогресса. Может и не совсем в тему, но в случае когда несколько однотипных устройств, писал один софт, который в зависимости от перемычек получал номер ус-ва и, соответственно, вёл себя подобающе. Типа, мастер был 0-м, ведомые имели другие номера. Но скетч был один для всех. Никакой путаницы, никаких лишних телодвижений.

Komandir
Offline
Зарегистрирован: 18.08.2018

Я правильно понял что автору лень закоментить один дефайн и раскоментить другой, но менять целевую плату в менеджере плат не лень ???

Я то дурак думал что она там пишет что то глобальное, зависящее от загрузчика (точек входа процедур записи во флеш) ...

b707
Offline
Зарегистрирован: 26.05.2017

vrd пишет:

Если есть желание добавить новую фишку - написать в первом скетче и если всё заработает просто скопировать во второй. А так есть возможность испортить прошивку для обоих устройств одновременно.

Сам один раз столкнулся с подобным и теперь храню всё раздельно. Даже если в скетче изменено только имя ОТА.


открой для себя систему контроля версий, например cvs или git, и тогда не надо будет хранить десятки версий одного кода. А добавление новых фич без риска порчи работающего кода делается через бранчинг.