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

Блоки с разделением на ESP32/ESP8266 а так же совместные
aidar_i
Полковник
Сообщения: 3357
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 12 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

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

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

Сообщение ussrtk »

Очень здорово. На СИ у меня получалось, но как реализовать на FlProg так и не въехал. Интересно посмотреть, как надо было...
aidar_i
Полковник
Сообщения: 3357
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 12 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

ussrtk писал(а): 27 авг 2021, 12:48Очень
Приходится применять разные ухищрения.
Для этого нужно знать, что получается после компиляции.
starmos
Сержант
Сообщения: 141
Зарегистрирован: 11 апр 2016, 15:46
Откуда: Челябинск

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

Сообщение starmos »

Спасибо за пример. Я не в первый раз сталкиваюсь с информацией, что WiFi запускается на 0-м ядре. Но откуда это взялось, где это посмотреть можно? Потому что, насколько я помню, задача Arduino IDE описывается в файле main.cpp и там указано ядро 1. А в какой момент создается задача под ядро 0? В самой библиотеке WiFi? Т.е. любое ядро выполняет код, но кто его формирует для ядра 0, в случае WiFi? Если мы используем функции WiFi в FLProg, то это потом транслируется в исходный текст для Arduino IDE, а это код для ядра 1, разве нет?
aidar_i
Полковник
Сообщения: 3357
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 12 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

Не помню где, но читал что запускается в ядре 0 и даже команда какая его там запускает было. Эта команда прошита в ESP32 , нулевое ядро (Core0) уже запрограммировано для решения задач радиочастотной связи.
aidar_i
Полковник
Сообщения: 3357
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 12 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

В 1м сообщении добавил блоки для удаления задачи.
JonyBest
Сержант
Сообщения: 269
Зарегистрирован: 18 ноя 2015, 22:42
Откуда: Близко к Ставрополю
Имя: Евгений
Поблагодарили: 2 раза

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

Сообщение JonyBest »

Спасибо за блоки!!!
Перенёс на ядро 0 весь WEB и MQTT. Отклик почти мгновенный. Работает шустренько. На скорость работы яра 1 влияния не оказывают.
Но... от нестабильности ESP32 избавиться не получилось. ESP32 перегружается хаотично, может и пару суток отработать, может и за полчаса перегрузиться...
В любом случае, это шаг вперед!
vovka1973
Подполковник
Сообщения: 1202
Зарегистрирован: 14 фев 2016, 14:16
Откуда: kazahstan
Благодарил (а): 32 раза
Поблагодарили: 6 раз

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

Сообщение vovka1973 »

JonyBest писал(а): 31 авг 2021, 11:18 ESP32 перегружается хаотично
у вас есп32 еще что-нибудь делает ?типа управляет реле например где нагрузка?
Изображение
JonyBest
Сержант
Сообщения: 269
Зарегистрирован: 18 ноя 2015, 22:42
Откуда: Близко к Ставрополю
Имя: Евгений
Поблагодарили: 2 раза

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

Сообщение JonyBest »

vovka1973 писал(а): 31 авг 2021, 19:05 у вас есп32 еще что-нибудь делает ?типа управляет реле например где нагрузка?
Нет. Обслуживание дисплея + пяток датчиков...
vovka1973
Подполковник
Сообщения: 1202
Зарегистрирован: 14 фев 2016, 14:16
Откуда: kazahstan
Благодарил (а): 32 раза
Поблагодарили: 6 раз

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

Сообщение vovka1973 »

JonyBest писал(а): 31 авг 2021, 19:27
vovka1973 писал(а): 31 авг 2021, 19:05 у вас есп32 еще что-нибудь делает ?типа управляет реле например где нагрузка?
Нет. Обслуживание дисплея + пяток датчиков...
просто подумал может из за помех перезагружается
У меня перезагружалась если связь рвалась с модемом , перенес поближе модем к есп и все перезагрузки закончились 18 дней уже . до этого с помехами боролся даже по датчикам температуры проходила . помогла переразводка земли.
Изображение
JonyBest
Сержант
Сообщения: 269
Зарегистрирован: 18 ноя 2015, 22:42
Откуда: Близко к Ставрополю
Имя: Евгений
Поблагодарили: 2 раза

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

Сообщение JonyBest »

Кстати, ESPUI-Мультиблок от Naladchik, работает только версии 1.3 и ниже. Использование версии 1.4 или 1.5 приводит к циклической перезагрузке контроллера...
aidar_i
Полковник
Сообщения: 3357
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 12 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

JonyBest писал(а): 01 сен 2021, 19:30 Кстати, ESPUI-Мультиблок от Naladchik, работает только версии 1.3 и ниже. Использование версии 1.4 или 1.5 приводит к циклической перезагрузке контроллера...
Вы с этими блоками использовали его?
Без блоков нормально?
JonyBest
Сержант
Сообщения: 269
Зарегистрирован: 18 ноя 2015, 22:42
Откуда: Близко к Ставрополю
Имя: Евгений
Поблагодарили: 2 раза

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

Сообщение 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?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Naladchik
Капитан
Сообщения: 908
Зарегистрирован: 04 окт 2015, 19:10
Откуда: Новосибирск
Имя: Павел
Благодарил (а): 20 раз
Поблагодарили: 22 раза

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

Сообщение Naladchik »

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

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

Сообщение Anydy »

Как по мне так вся прелесть ЕСП32 в том что WiFi работает на одном ядре а Ваш код на другом....думаю не стоит в ядро которое отвечает за ВиФи что то еще пихать....где то читал что это специально сделано для стабильности как ВиФи, так и основного кода
aidar_i
Полковник
Сообщения: 3357
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 12 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

Anydy писал(а): 02 сен 2021, 07:11 Как по мне так вся прелесть ЕСП32 в том что WiFi работает на одном ядре а Ваш код на другом....думаю не стоит в ядро которое отвечает за ВиФи что то еще пихать....где то читал что это специально сделано для стабильности как ВиФи, так и основного кода
Просто меру надо знать, не надо загружать излишне!
Нужно экспериментировать.
Аватара пользователя
Phazz
Полковник
Сообщения: 3109
Зарегистрирован: 17 окт 2016, 15:38
Откуда: Сургут
Имя: Анатолий
Благодарил (а): 228 раз
Поблагодарили: 107 раз

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

Сообщение Phazz »

[ref=#aa0000]Anydy[/ref], очень даже нужно. Например подселить к нему вэб интерфейс и телеграмм. А быстрый код пусть работает на 1 ядре.
JonyBest
Сержант
Сообщения: 269
Зарегистрирован: 18 ноя 2015, 22:42
Откуда: Близко к Ставрополю
Имя: Евгений
Поблагодарили: 2 раза

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

Сообщение JonyBest »

[ref=#000080]aidar_i[/ref], Подскажите как на Ваших блоках сделать две задачи на ядре "0". Есть желание чтобы одна задача удалилась по условию, а вторая продолжала работать...
aidar_i
Полковник
Сообщения: 3357
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 12 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение 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 хватило.
aidar_i
Полковник
Сообщения: 3357
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 12 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

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

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

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

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя