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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 02 сен 2021, 14:12
Phazz
[ref=#aa0000]Anydy[/ref], очень даже нужно. Например подселить к нему вэб интерфейс и телеграмм. А быстрый код пусть работает на 1 ядре.

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

Добавлено: 02 сен 2021, 20:17
JonyBest
[ref=#000080]aidar_i[/ref], Подскажите как на Ваших блоках сделать две задачи на ядре "0". Есть желание чтобы одна задача удалилась по условию, а вторая продолжала работать...

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

Добавлено: 02 сен 2021, 20:37
aidar_i
JonyBest писал(а): 02 сен 2021, 20:17 [ref=#000080]aidar_i[/ref], Подскажите как на Ваших блоках сделать две задачи на ядре "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 сен 2021, 05:50
aidar_i
JonyBest писал(а): 31 авг 2021, 11:18 Работает шустренько
Исполнение функции loop() не обходится без «пожирания» ресурсов.
Просто используя задачу с for(; ;) вместо Loop мы ускоряем работу контроллера.

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

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