• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ESP32C3 заглушка DeepSleep перестала исполняться

pvvx

Активный участник сообщества
Реальные задачи могут содержать множество вызовов отдельных процедур, которые будут кэшироваться по мере их вызова. И скорость выполнения может ещё больше просесть.
В принципе так оно пашет в любой задаче WiFi с MQTT - там кода более мегабайта и он в жизнь не влезает в кэш и ESP тупит по черному.
 

pvvx

Активный участник сообщества
Поглазел что пишут про deep-sleep в ESP Zigbee SDK...
И указывают тоже-самое - deep-sleep более затратный для ESP чем light-sleep:
  • Глубокий сон не используется SDK. Разработчик должен управлять им в своих приложениях. Для получения дополнительных методов пробуждения вы можете обратиться к примеру глубокого сна ESP-IDF. Кроме того, Espressif предоставляет заглушку для обработки пробуждений, что позволяет проводить быструю проверку, и пользователь может решить, просыпаться или продолжать глубокий сон в этой заглушке, как объяснено в примере заглушки глубокого сна ESP-IDF.
  • Рекомендуется реализовать стандартное устройство Zigbee Sleepy Device с использованием примера Light Sleep . Deep sleep запускает перезагрузку, и устройству необходимо пройти процесс повторного присоединения для повторного присоединения к сети. Это означает, что после каждого пробуждения из режима глубокого сна требуются дополнительные пакетные взаимодействия. Однако режим Deep sleep может быть выгоден для снижения энергопотребления, особенно когда устройство остается в состоянии сна в течение длительных периодов, например, более 30 минут.
Но опять не указывают время пробуждения SoC.:(
А картинки с замерами потребления показывают, что из ESP32 можно сделать вечный двигатель - они выдают обратный ток более 20 mA :) (Горе измерители на Power Profiler за $1000 )
 

pvvx

Активный участник сообщества
С кэшированием Flash у ESP можно извратиться по полной, написав код в шахматном порядке (команды jmp или вызовы call с ret в сторону уменьшения адресов расположенными с интервалами равными блоку считываемого из Flash контроллером XIP). Тогда на каждый ret или jmp будет читаться блок в кэш из Flash наверно более 8 байт и производительность станет гарантированно ниже 8 Мега-выборок байт в сек на команды.

А код именно так и пишут в СИ и C++, чтобы объявить подфункции до описания основной процедуры их вызова. Т.е. кэш будет дополнительно тормозить, если вы описываете код в классическом стиле, как учат ….
А надо все мелкие процедуры оформлять как inline
 

pvvx

Активный участник сообщества
Оптимизация компилятора по размеру кода с включением подфункций даст самый большой тормоз в ESP :p
 

pvvx

Активный участник сообщества
Проверить качество кода и производительность ESP можно очень просто.

Собираем какой пример с WiFi и RTOS. Для RTOS ставим частоту тиков в 1 мс. Частоту CPU в 16 MHz.
Должен успевать качать и всё делать по WiFi без доп. задержек – т.е. 800 килобайт в сек в TCP.

RTL87xx на Corteх M0 в 16 MHz всё это успевает и не тормозит (в тестах iperf). Порог до торможения где -то на уровне ниже 8..10 MHz CLK.
 

pvvx

Активный участник сообщества
Так-же смотрим в ассемблере, как располагаются константы и адреса вызовов и данных после сборки сишных исходников.

Константы и адреса располагаются в конце процедуры. Это значит, что кэш должна была выбрать блок по адресу старта процедуры и блок в конце процедуры, чтобы CPU смог исполнить данную часть кода. Это как минимум 2 обращения по SPI к Flash с передачей команды чтения, адреса в 3 байта, dummy байтов и далее чтения блока.
Тактирование SPI Flash у ESP всего 80 MHz и QIO.
Если модуль ESP используют соединение с Flash по DIO - это извращение вообще сразу в помойку.

В итоге и выходит, что ESP это чипы для бедных, не могущих позволить себе более качественные и менее жрущие чипы.
 

pvvx

Активный участник сообщества
Вот тот-же тест, но в Flash режиме DIO:
1746807742838.png
И вместо 11 us время исполнения уже 20 us.
 

pvvx

Активный участник сообщества
Сигнал с ноги /CS у Flash:
1746810181192.png
На выборку тестовой процедуры потребовалось считать 10 блоков из Flash.

Каждый блок по ~2 мкс с CLK 80 МГц -> 160 тактов DIO.
 

pvvx

Активный участник сообщества
@nikolz - Стоит ли из-за 2Мега операций с 32-х битными целочисленными значениями в секунду использовать чип с таким диким потреблением?
Это особенно касается всяких Sleep режимов и если идет soft обращение к Flash (любимый у народа диск во Flash), приводящее к сбросу всех кэшей у всех типов ESP….
 

pvvx

Активный участник сообщества
К переферии ESP8266 у меня нет претензий I2C у ESP8266 работает со скоростью 2 Mb/s
Безусловно :ROFLMAO: , так как тактирование GPIO и шины у ESP8266 всего 26МГц, то ногодрыгом можно добиться в пределе 13 МГц - два такта - вывод "0" и "1". Но на изменение SDA надо ещё такт шины, и имея 3 такта с кривым SCL получим 8.7 MГц. Но надотъ уметь это писать на ASM с опциями компилятору не ставить "memw" или "extw" и не забывать о FIFO на этой шине...
Вот только во время этих действий CPU ESP8266 ничего не может, кроме увеличения тока по сигналу ожидания длящегося 6 тактов CPU (или 12 при CLK CPU x2) от шины. А должно быть уменьшение, т.к. CPU ждет...
 

nikolz

Well-known member
Кто-то там говорил о производительности ESP32-C3.
Попробуем посчитать реальную производительность ESP32-C3 для больших объемов кода или для задач, где фигурирует чтение-запись Flash (вызывающая полное опустошение кэша CPU).
Итог:
Среднее время выполнения одной операции целочисленной числодробилки на ESP32-C3 равно 260 нс.
= 3846154 операций в секунду.
Т.е. производительность ESP32-C3 на CLK в 160 MHz не более чем у CPU в 4..6 MHz типа Cortex M0.
Но Вы не доказали это, так как нет аналогичного теста на CPU в 4..6 MHz типа Cortex M0.
 

nikolz

Well-known member
@nikolz - Стоит ли из-за 2Мега операций с 32-х битными целочисленными значениями в секунду использовать чип с таким диким потреблением?
Это особенно касается всяких Sleep режимов и если идет soft обращение к Flash (любимый у народа диск во Flash), приводящее к сбросу всех кэшей у всех типов ESP….
Я с Вами согласен, поэтому пока и не определился что использовать.
----------------
получил TLSR8208 UART Хочу потестить их вместо встроенных Приемопередатчиков.
получил СH592F тоже хочу потестить.
 
Сверху Снизу