Использование 2х ядер ESP32

Создание задач для использования обоих ядер ESP32

Блоки с разделением на ESP32/ESP8266 а так же совместные
aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

Использование 2х ядер ESP32

#1

Сообщение aidar_i » 26.08.2021{, 22:30}

Плата ESP32 оснащена двумя 32-битными микропроцессорами Xtensa LX6 – ядром 0 и ядром 1. То есть, это 2-ядерная плата. По умолчанию код IDE Arduino запускается на ядре 1.
Как запустить код на втором ядре ESP32 при помощи создания заданий? Код не вошедший в задачу ядра 0, запускается в 1 ядре.
WiFi автоматически запускается в 0 ядре. В примере уарт выводит значение номера ядра один раз при запуске.
Попробовал компилировать код со штатными настройками wifi, код получается корректным с моими блоками.
Добавил блоки для удаления задачи.
Удаление задачи по условию .flp
(459.81 КБ) 171 скачивание
Аналогично Setup:
Удаление задачи после 1 цикла .flp
(420.54 КБ) 146 скачиваний
Последний раз редактировалось aidar_i 30.08.2021{, 22:24}, всего редактировалось 3 раза.

Аватара пользователя
ussrtk
Рядовой
Сообщения: 36
Зарегистрирован: 06.01.2017{, 12:25}
Репутация: 17

Использование 2х ядер ESP32

#2

Сообщение ussrtk » 27.08.2021{, 12:48}

Очень здорово. На СИ у меня получалось, но как реализовать на FlProg так и не въехал. Интересно посмотреть, как надо было...

aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

Использование 2х ядер ESP32

#3

Сообщение aidar_i » 27.08.2021{, 14:59}

ussrtk писал(а):
27.08.2021{, 12:48}
Очень
Приходится применять разные ухищрения.
Для этого нужно знать, что получается после компиляции.

starmos
Сержант
Сообщения: 114
Зарегистрирован: 11.04.2016{, 15:46}
Репутация: 13
Откуда: Челябинск

Использование 2х ядер ESP32

#4

Сообщение starmos » 27.08.2021{, 15:45}

Спасибо за пример. Я не в первый раз сталкиваюсь с информацией, что WiFi запускается на 0-м ядре. Но откуда это взялось, где это посмотреть можно? Потому что, насколько я помню, задача Arduino IDE описывается в файле main.cpp и там указано ядро 1. А в какой момент создается задача под ядро 0? В самой библиотеке WiFi? Т.е. любое ядро выполняет код, но кто его формирует для ядра 0, в случае WiFi? Если мы используем функции WiFi в FLProg, то это потом транслируется в исходный текст для Arduino IDE, а это код для ядра 1, разве нет?

aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

Использование 2х ядер ESP32

#5

Сообщение aidar_i » 27.08.2021{, 16:05}

Не помню где, но читал что запускается в ядре 0 и даже команда какая его там запускает было. Эта команда прошита в ESP32 , нулевое ядро (Core0) уже запрограммировано для решения задач радиочастотной связи.

aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

Использование 2х ядер ESP32

#6

Сообщение aidar_i » 30.08.2021{, 22:25}

В 1м сообщении добавил блоки для удаления задачи.

JonyBest
Сержант
Сообщения: 269
Зарегистрирован: 18.11.2015{, 22:42}
Репутация: 89
Откуда: Близко к Ставрополю
Имя: Евгений

Использование 2х ядер ESP32

#7

Сообщение JonyBest » 31.08.2021{, 11:18}

Спасибо за блоки!!!
Перенёс на ядро 0 весь WEB и MQTT. Отклик почти мгновенный. Работает шустренько. На скорость работы яра 1 влияния не оказывают.
Но... от нестабильности ESP32 избавиться не получилось. ESP32 перегружается хаотично, может и пару суток отработать, может и за полчаса перегрузиться...
В любом случае, это шаг вперед!

vovka1973
Майор
Сообщения: 1060
Зарегистрирован: 14.02.2016{, 14:16}
Репутация: 42
Откуда: kazahstan

Использование 2х ядер ESP32

#8

Сообщение vovka1973 » 31.08.2021{, 19:05}

JonyBest писал(а):
31.08.2021{, 11:18}
ESP32 перегружается хаотично
у вас есп32 еще что-нибудь делает ?типа управляет реле например где нагрузка?
Изображение

JonyBest
Сержант
Сообщения: 269
Зарегистрирован: 18.11.2015{, 22:42}
Репутация: 89
Откуда: Близко к Ставрополю
Имя: Евгений

Использование 2х ядер ESP32

#9

Сообщение JonyBest » 31.08.2021{, 19:27}

vovka1973 писал(а):
31.08.2021{, 19:05}
у вас есп32 еще что-нибудь делает ?типа управляет реле например где нагрузка?
Нет. Обслуживание дисплея + пяток датчиков...

vovka1973
Майор
Сообщения: 1060
Зарегистрирован: 14.02.2016{, 14:16}
Репутация: 42
Откуда: kazahstan

Использование 2х ядер ESP32

#10

Сообщение vovka1973 » 31.08.2021{, 19:28}

JonyBest писал(а):
31.08.2021{, 19:27}
vovka1973 писал(а):
31.08.2021{, 19:05}
у вас есп32 еще что-нибудь делает ?типа управляет реле например где нагрузка?
Нет. Обслуживание дисплея + пяток датчиков...
просто подумал может из за помех перезагружается
У меня перезагружалась если связь рвалась с модемом , перенес поближе модем к есп и все перезагрузки закончились 18 дней уже . до этого с помехами боролся даже по датчикам температуры проходила . помогла переразводка земли.
Изображение

JonyBest
Сержант
Сообщения: 269
Зарегистрирован: 18.11.2015{, 22:42}
Репутация: 89
Откуда: Близко к Ставрополю
Имя: Евгений

Использование 2х ядер ESP32

#11

Сообщение JonyBest » 01.09.2021{, 19:30}

Кстати, ESPUI-Мультиблок от Naladchik, работает только версии 1.3 и ниже. Использование версии 1.4 или 1.5 приводит к циклической перезагрузке контроллера...

aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

Использование 2х ядер ESP32

#12

Сообщение aidar_i » 01.09.2021{, 20:30}

JonyBest писал(а):
01.09.2021{, 19:30}
Кстати, ESPUI-Мультиблок от Naladchik, работает только версии 1.3 и ниже. Использование версии 1.4 или 1.5 приводит к циклической перезагрузке контроллера...
Вы с этими блоками использовали его?
Без блоков нормально?

JonyBest
Сержант
Сообщения: 269
Зарегистрирован: 18.11.2015{, 22:42}
Репутация: 89
Откуда: Близко к Ставрополю
Имя: Евгений

Использование 2х ядер ESP32

#13

Сообщение JonyBest » 01.09.2021{, 20:44}

aidar_i писал(а):
01.09.2021{, 20:30}
Без блоков нормально?
Да, да - версии 1.3 ESPUI-Мультиблок от Naladchik работает вполне стабильно. Я писал Naladchik в теме, что его блоки выше версии 1.3 не корректно работают с диспетчером задач от от ecoins, видимо у беды один корень...

Отправлено спустя 42 минуты 11 секунд:
Провел преинтереснейший эксперимент. ВиФи отключен. Пустой проект, Две задачи, разделенные на два ядра, в каждой задаче диспетчер от ecoins для контроля скорости цикла для наблюдения логическим анализатором.
144.flp
(3.97 МБ) 56 скачиваний
Загрузка ядра 0
12.JPG
Загрузка ядра 1
13.JPG
На сколько я понял, ESP32 оснащена двумя одинаковыми по мощности 32-битными микропроцессорами Xtensa LX6
Не понятно чем озадачено ядро 0?

Naladchik
Капитан
Сообщения: 822
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 151
Откуда: Новосибирск
Имя: Павел

Использование 2х ядер ESP32

#14

Сообщение Naladchik » 02.09.2021{, 00:54}

JonyBest писал(а):
01.09.2021{, 21:26}
Я писал Naladchik в теме, что его блоки выше версии 1.3 не корректно работают с диспетчером задач от от ecoins
И не будут (по крайней мере в ближайшее время из за проблем с редактором блоков) , т.к для них он даром не нужен. Скомпоновали блоки интерфейса на одну плату без каких либо условий, связали их с логикой клеммами и переменными, а уже логику разбивайте на задачи менеджером как душе угодно. И никаких проблем с этими блоками не будет.
Win10-64. FLProg Portable.
Изображение

Anydy

Использование 2х ядер ESP32

#15

Сообщение Anydy » 02.09.2021{, 07:11}

Как по мне так вся прелесть ЕСП32 в том что WiFi работает на одном ядре а Ваш код на другом....думаю не стоит в ядро которое отвечает за ВиФи что то еще пихать....где то читал что это специально сделано для стабильности как ВиФи, так и основного кода

aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

Использование 2х ядер ESP32

#16

Сообщение aidar_i » 02.09.2021{, 11:09}

Anydy писал(а):
02.09.2021{, 07:11}
Как по мне так вся прелесть ЕСП32 в том что WiFi работает на одном ядре а Ваш код на другом....думаю не стоит в ядро которое отвечает за ВиФи что то еще пихать....где то читал что это специально сделано для стабильности как ВиФи, так и основного кода
Просто меру надо знать, не надо загружать излишне!
Нужно экспериментировать.

Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

Использование 2х ядер ESP32

#17

Сообщение Phazz » 02.09.2021{, 14:12}

Anydy, очень даже нужно. Например подселить к нему вэб интерфейс и телеграмм. А быстрый код пусть работает на 1 ядре.

JonyBest
Сержант
Сообщения: 269
Зарегистрирован: 18.11.2015{, 22:42}
Репутация: 89
Откуда: Близко к Ставрополю
Имя: Евгений

Использование 2х ядер ESP32

#18

Сообщение JonyBest » 02.09.2021{, 20:17}

aidar_i, Подскажите как на Ваших блоках сделать две задачи на ядре "0". Есть желание чтобы одна задача удалилась по условию, а вторая продолжала работать...

aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

Использование 2х ядер ESP32

#19

Сообщение aidar_i » 02.09.2021{, 20:37}

JonyBest писал(а):
02.09.2021{, 20:17}
aidar_i, Подскажите как на Ваших блоках сделать две задачи на ядре "0". Есть желание чтобы одна задача удалилась по условию, а вторая продолжала работать...
Просто поменяйте в блоке ESP32_Task1_Core0 номер задачи везде и в названии тоже, создайте новый блок. Где увидете Task1 поменяйте на Task1_1, например.
В DeclaareSection: TaskHandle_t Task1_1;
в SetupSection:
xTaskCreatePinnedToCore(
Task1_1code, "Task1_1", stack_size , NULL, Task_priority, &Task1_1, 0);
В LoopSection:
}
void Task1_1code( void * pvParameters ){
for(;;){
Если создать блок в новом редакторе, можно задавать номер задачи из параметра.
Так можно создавать задачи сколько хотите, лишь бы памяти ESP32 хватило.

aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

Использование 2х ядер ESP32

#20

Сообщение aidar_i » 05.09.2021{, 05:50}

JonyBest писал(а):
31.08.2021{, 11:18}
Работает шустренько
Исполнение функции loop() не обходится без «пожирания» ресурсов.
Просто используя задачу с for(; ;) вместо Loop мы ускоряем работу контроллера.

Даже использовав while(1) мы ускоряемся на 20 %:

void setup() {
}
void loop() {
while(1) {
код исполняемый;
}
}

Ответить

Вернуться в «Блоки для ESP32/ESP8266»