Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added configuration #89

Merged
merged 2 commits into from
Jun 10, 2022
Merged

Added configuration #89

merged 2 commits into from
Jun 10, 2022

Conversation

bvp
Copy link
Contributor

@bvp bvp commented Jun 9, 2022

for platformio and clang-format

@alutov
Copy link
Owner

alutov commented Jun 10, 2022

Я так понимаю, это все новые файлы, и они не используются при сборке в чистом eps-idf. Сам пишу в простом текстовом редакторе, как-то Visual C не осилил пока(. Не против добавить, но сам мало знаком с этой средой, нужны наверное и комментарии, чтобы включить это в описание. Что касается форматирования, не совсем понял как оно работает, если можно, поясните кратко.

@alutov alutov merged commit 8d96195 into alutov:master Jun 10, 2022
@bvp
Copy link
Contributor Author

bvp commented Jun 14, 2022

PlatformIO

Это платформа для сборки прошивок для микроконтроллеров. Управляет инструментарием сборки, и зависимостями проекта. Всё нужное скачает сама. Со списком поддерживаемых платформ можно ознакомиться тут, а фреймворков - тут.

platformio.ini - файл конфигурации для PlatformIO
Собрать так - pio run -t build или просто pio run
Загрузить прошивку - pio run -t upload
Потребуется только поправить upload_port и monitor_port.
Для Win32 значение будет вида COM4 (поставить свой номер порта, на котором находится прошивальщик).
Для Linux - будет /dev/ttyUSB0 (так же поставить свой номер порта, на котором находится прошивальщик).
Для macOS - как в прилагаемом примере.

Clang-format

В файле описываются правила форматирования кода, согласно которым код приводится к нужному стилю. Необходим установленный clang-format.

@DmytroMelnyk
Copy link

Так вот откуда взялась поддержка Platformio. Мне нравится интеграция с VSCode.

@sbasmanov
Copy link

sbasmanov commented Nov 12, 2022

Может кто подскажет, куда копать?
Compiling .pio/build/esp32dev/main/r4sGate.o
main/r4sGate.c: In function 'rmt_init':
main/r4sGate.c:649:2: error: implicit declaration of function 'rmt_set_gpio'; did you mean 'rmt_set_pin'? [-Werror=implicit-function-declaration]
rmt_set_gpio(rmt_rx.channel, RMT_MODE_RX, gpio_num,0);
^~~~~~~~~~~~
rmt_set_pin

При этом в доке https://docs.espressif.com/projects/esp-idf/en/v4.4/esp32/api-reference/peripherals/rmt.html есть оба:
rmt_set_gpio(rmt_channel_tchannel, rmt_mode_tmode, gpio_num_tgpio_num, bool invert_signal)
rmt_set_pin(rmt_channel_tchannel, rmt_mode_tmode, gpio_num_tgpio_num)

А вот в rmt.o который собрался, есть только rmt_set_pin. Что-то не докачалось в platformio?

Заменил вызовы на
rmt_set_pin(rmt_rx.channel, RMT_MODE_RX, gpio_num);
rmt_set_pin(rmt_tx.channel, RMT_MODE_TX, gpio_num);

Сборка пошла дальше, но в конце выдает:
Successfully created esp32 image.
Linking .pio/build/esp32dev/firmware.elf
/Users/sergey/.platformio/packages/toolchain-xtensa-esp32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld: .pio/build/esp32dev/firmware.elf section .iram0.text' will not fit in region iram0_0_seg'
/Users/sergey/.platformio/packages/toolchain-xtensa-esp32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld: IRAM0 segment data does not fit.
/Users/sergey/.platformio/packages/toolchain-xtensa-esp32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld: region `iram0_0_seg' overflowed by 3008 bytes
collect2: error: ld returned 1 exit status
*** [.pio/build/esp32dev/firmware.elf] Error 1

Где-то неправильная конфигурация?

upd: разобрался. откуда-то создался sdkconfig.esp32dev с параметрами 2M. Скопировал sdkconfig в sdkconfig.esp32dev и всё нормально собралось. прошивка залилась, плата завелась.

upd2: с первым вопросом тоже разобрался. В platformio.ini было [email protected]. Поменял на 5.2.0 и тогда подтянулись правильные версии:
PLATFORM: Espressif 32 (5.2.0) > Espressif ESP32 Dev Module
PACKAGES:

  • framework-espidf @ 3.40402.0 (4.4.2)
  • tool-cmake @ 3.16.4
  • tool-esptoolpy @ 1.40201.0 (4.2.1)
  • tool-ninja @ 1.9.0
  • toolchain-esp32ulp @ 1.22851.191205 (2.28.51)
  • toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch3

@alutov
Copy link
Owner

alutov commented Nov 12, 2022

По первому вопросу. Изначально пытался компилировать с rmt_set_pin в среде esp-idf версии 4.4 (вроде старая уже), компилятор ругнулся на то, что функция устарела, пользуйтесь более новой, и предложил первую. Что касается второго вопроса. Чтобы все новое влезло в IRAM, пришлось корректировать sdkconfig. Я уж думал, что забыл обновить его на гите, но если все собралось, значит не забыл). Надо еще кое-что поправить. Приедут скоро еще датчики, будет обновление). Заказал себе и esp32c3. Правлю под нее код, вроде все влазит, даже экран. Кроме RMT, конечно, их там только по 2, то есть не 3 входа ds18b20 и dht22, а только 2.

@sbasmanov
Copy link

Да, сейчас проверил, с версией esp-idf 4.4 пишет, что deprecated. Тут по хорошему надо через #if или #ifdef (не знаю, какие там макро есть) проверять версию и использовать соответствующие вызовы. Ну либо указать в доке, что минимальная версия такая-то.

Я уж думал, что забыл обновить его на гите, но если все собралось, значит не забыл).

Там откуда-то самостоятельно создался новый файл sdkconfig.esp32dev (по имени платы). И он с виду очень похож на sdkconfig, что лежит в гите. Поэтому я не сразу увидел, что там неправильный размер памяти - везде было 2M.
И наверное надо бы platformio.ini поправить, убрать @4.4.0 (или заменить на @5.2.0) что бы скачивалась правильная версия. https://registry.platformio.org/platforms/platformio/espressif32

Правлю под нее код, вроде все влазит, даже экран.

Вот кстати, может имеет смысл сделать как это устроено у многих больших проектов на микроконтроллерах (marlin например)? Где-то есть config.h в котором стоит #define FEATURE_X и если оно определено, то бинарь собирается с этой фичей (где-то в коде #ifdef FEATURE_X). Тот же экран можно вынести туда, датчики, еще какие-то вещи, которые кому-то могут быть не нужны. Если полностью перейти на platformio, который сейчас почти у всех есть, то каждый тогда сможет легко собирать себе прошивку в нужной конфигурации. Туда же, кстати, и настройки wifi можно вписать, что бы потом через гостевую сеть не подключаться.

@bvp
Copy link
Contributor Author

bvp commented Nov 14, 2022

Там откуда-то самостоятельно создался новый файл sdkconfig.esp32dev (по имени платы). И он с виду очень похож на sdkconfig, что лежит в гите. Поэтому я не сразу увидел, что там неправильный размер памяти - везде было 2M. И наверное надо бы platformio.ini поправить, убрать @4.4.0 (или заменить на @5.2.0) что бы скачивалась правильная версия. https://registry.platformio.org/platforms/platformio/espressif32

sdkconfig.esp32dev генерируется PlatformIO из конфига по-умолчанию с использованием имени env в platformio.ini, и используется для сборки. Чтобы переписать какие-то параметры есть файл sdkconfig.defaults, в котором нужно эти параметры добавить. Я так понимаю, что речь идёт о следующих параметрах:

  • CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y
  • CONFIG_ESPTOOLPY_FLASHSIZE="4MB"

@alutov
Copy link
Owner

alutov commented Nov 14, 2022

Добавил эти 2 строчки в sdkconfig.defaults и поправил @5.2.0.

@sbasmanov
Copy link

sbasmanov commented Nov 15, 2022

Я так понимаю, что речь идёт о следующих параметрах:

Чего-то еще не хватает.

xtensa-esp32-elf/bin/ld: .pio/build/esp32dev/firmware.elf section `.iram0.text' will not fit in region `iram0_0_seg'
xtensa-esp32-elf/bin/ld: IRAM0 segment data does not fit.
xtensa-esp32-elf/bin/ld: region `iram0_0_seg' overflowed by 1736 bytes

Если сравнить sdkconfig и то, что сгенерил platformio - там очень много различий. Насколько я понимаю, Андрей правильно настроил sdkconfig, что бы всё правильно собиралось. Теперь надо эти отличия как-то продублировать в sdkconfig.defaults ? Я просто не очень в курсе, как там у platformio всё устроено, поэтому спрашиваю - что надо сделать, что бы pio генерил корректный конфиг?
И вопрос по поводу ini - надо там указывать версию? platform = [email protected] или если версии нет, он возьмет latest?

Нашел доку по espidf: https://docs.platformio.org/en/latest/frameworks/espidf.html но там не сказано про генерацию sdkconfig.

@alutov
Copy link
Owner

alutov commented Nov 15, 2022

В espidf файл sdkconfig создается и редактируется программой menuconfig. Содержимое меняется при смене версии и типа устройства. Я думал, что PlatformIO подхватывает этот файл. Может эго просто переименовать в sdkconfig.defaults ?

@sbasmanov
Copy link

sbasmanov commented Nov 15, 2022

Может эго просто переименовать в sdkconfig.defaults ?

Меня тоже такая мысль посетила. Только вот я не понял, правильно ли так делать. Погуглил немного - там какие-то сложные конфигурации у народа, но у них эти файлы вроде лежат отдельно. Сейчас скопировал sdkconfig в defaults - проект собрался, но файл .esp32dev всё равно немного отличается. Там несколько опций исчезло и пару добавилось. Diff в аттаче. Не знаю, нужные ли это опции или нет.
config.diff.zip

Содержимое меняется при смене версии и типа устройства.

Вот тут, кстати, второй вопрос. Как правильно задать настройки для каждого устройства? В platformio.ini можно описать несколько конфигураций (env) для каждого варианта платы, но вот совершенно не понятно, в какие файлы вписывать настройки из sdkconfig. Насколько я понял, сейчас platformio не пересоздает sdkconfig. если изменился sdkconfig.defaults. Они пишут, что espidf тоже так делает, поэтому они и не меняли поведение. Т.е. по идее можно для каждой платы создать свой sdkconfig и положить его в гит, что бы platformio не генерил их самостоятельно непонятно из каких шаблонов.

@alutov
Copy link
Owner

alutov commented Nov 15, 2022

Насколько я понял, в espidf, если есть файл sdkconfig, данные берутся только из него, файл sdkconfig.defaults удалял, вроде ничего не менялось.

@sbasmanov
Copy link

sbasmanov commented Nov 15, 2022

В документации platformio пишут:

The general project configuration (default optimization level, bootloader configuration partition tables, etc) is set in a single file called sdkconfig in the root folder of the project. This configuration file can be modified via a special target called menuconfig (PlatformIO v4.3.0 greater is required)

Т.е. pio по идее должен как-то учитывать содержимое sdkconfig. А он судя по всему этого не делает.

Про sdkconfig.defaults написано в доке esp-idf: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/kconfig.html#project-configuration-menu
Тут про defaults: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/build-system.html#custom-sdkconfig-defaults

Получается, надо все необходимые опции проекта перенести в sdkconfig.defaults и при необходимости создать дополнительные sdkconfig.defaults.< target > с индивидуальными настройками для каждого таргета (если требуется). Далее, судя по всему, файл sdkconfig будет генериться самостоятельно при сборке из sdkconfig.defaults. В общем надо как-то попробовать в нативной среде, будет ли это работать и потом тоже самое проверить в pio.

@bvp
Copy link
Contributor Author

bvp commented Nov 15, 2022

поправил согласно изменениям sdkconfig
отправил pull request #118

@sbasmanov
Copy link

отправил pull request #118

Спасибо. Собралось всё без ошибок.

RAM:   [==        ]  17.2% (used 56336 bytes from 327680 bytes)
Flash: [========= ]  93.0% (used 1829285 bytes from 1966080 bytes)

Есть вопрос. Почему-то появилась разница в размере бинаря. Вот сборка с alutov:master - copy sdkconfig -> sdkconfig.esp32dev

RAM:   [==        ]  17.2% (used 56488 bytes from 327680 bytes)
Flash: [========= ]  89.2% (used 1752817 bytes from 1966080 bytes)

И в вашем PR всё равно осталась разница между sdkconfig и создавшимся sdkconfig.esp32dev. Не знаю, повлияло ли это на размер?
config.diff.zip

@bvp
Copy link
Contributor Author

bvp commented Nov 16, 2022

отправил pull request #118

Спасибо. Собралось всё без ошибок.

RAM:   [==        ]  17.2% (used 56336 bytes from 327680 bytes)
Flash: [========= ]  93.0% (used 1829285 bytes from 1966080 bytes)

Есть вопрос. Почему-то появилась разница в размере бинаря. Вот сборка с alutov:master - copy sdkconfig -> sdkconfig.esp32dev

RAM:   [==        ]  17.2% (used 56488 bytes from 327680 bytes)
Flash: [========= ]  89.2% (used 1752817 bytes from 1966080 bytes)

И в вашем PR всё равно осталась разница между sdkconfig и создавшимся sdkconfig.esp32dev. Не знаю, повлияло ли это на размер? config.diff.zip

да, много параметров поменялось, не со всеми разобрался
но и конфиг не полностью перенёс
возможно есть ещё какие-то опции, которые так влияют на размер
пока заметил только что параметры bluetooth сильно влияли на размер, и только только влезало

посмотрю как будет время

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants