Страница 1 из 2

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

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

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

Добавлено: 27.08.2021{, 12:48}
ussrtk
Очень здорово. На СИ у меня получалось, но как реализовать на FlProg так и не въехал. Интересно посмотреть, как надо было...

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

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

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

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

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

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

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

Добавлено: 30.08.2021{, 22:25}
aidar_i
В 1м сообщении добавил блоки для удаления задачи.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 02.09.2021{, 14:12}
Phazz
Anydy, очень даже нужно. Например подселить к нему вэб интерфейс и телеграмм. А быстрый код пусть работает на 1 ядре.

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

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

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

Добавлено: 02.09.2021{, 20:37}
aidar_i
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 хватило.

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

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

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

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