Использование 2х ядер ESP32
-
- Полковник
- Сообщения: 3357
- Зарегистрирован: 24 дек 2016, 16:55
- Откуда: Уфа
- Имя: Айдар
- Благодарил (а): 12 раз
- Поблагодарили: 100 раз
- Контактная информация:
Использование 2х ядер ESP32
Плата ESP32 оснащена двумя 32-битными микропроцессорами Xtensa LX6 – ядром 0 и ядром 1. То есть, это 2-ядерная плата. По умолчанию код IDE Arduino запускается на ядре 1.
Как запустить код на втором ядре ESP32 при помощи создания заданий? Код не вошедший в задачу ядра 0, запускается в 1 ядре.
WiFi автоматически запускается в 0 ядре. В примере уарт выводит значение номера ядра один раз при запуске.
Попробовал компилировать код со штатными настройками wifi, код получается корректным с моими блоками.
Добавил блоки для удаления задачи. Аналогично Setup:
Как запустить код на втором ядре ESP32 при помощи создания заданий? Код не вошедший в задачу ядра 0, запускается в 1 ядре.
WiFi автоматически запускается в 0 ядре. В примере уарт выводит значение номера ядра один раз при запуске.
Попробовал компилировать код со штатными настройками wifi, код получается корректным с моими блоками.
Добавил блоки для удаления задачи. Аналогично Setup:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось aidar_i 30 авг 2021, 22:24, всего редактировалось 3 раза.
Использование 2х ядер ESP32
Очень здорово. На СИ у меня получалось, но как реализовать на FlProg так и не въехал. Интересно посмотреть, как надо было...
-
- Полковник
- Сообщения: 3357
- Зарегистрирован: 24 дек 2016, 16:55
- Откуда: Уфа
- Имя: Айдар
- Благодарил (а): 12 раз
- Поблагодарили: 100 раз
- Контактная информация:
Использование 2х ядер ESP32
Приходится применять разные ухищрения.
Для этого нужно знать, что получается после компиляции.
Использование 2х ядер ESP32
Спасибо за пример. Я не в первый раз сталкиваюсь с информацией, что WiFi запускается на 0-м ядре. Но откуда это взялось, где это посмотреть можно? Потому что, насколько я помню, задача Arduino IDE описывается в файле main.cpp и там указано ядро 1. А в какой момент создается задача под ядро 0? В самой библиотеке WiFi? Т.е. любое ядро выполняет код, но кто его формирует для ядра 0, в случае WiFi? Если мы используем функции WiFi в FLProg, то это потом транслируется в исходный текст для Arduino IDE, а это код для ядра 1, разве нет?
-
- Полковник
- Сообщения: 3357
- Зарегистрирован: 24 дек 2016, 16:55
- Откуда: Уфа
- Имя: Айдар
- Благодарил (а): 12 раз
- Поблагодарили: 100 раз
- Контактная информация:
Использование 2х ядер ESP32
Не помню где, но читал что запускается в ядре 0 и даже команда какая его там запускает было. Эта команда прошита в ESP32 , нулевое ядро (Core0) уже запрограммировано для решения задач радиочастотной связи.
-
- Сержант
- Сообщения: 269
- Зарегистрирован: 18 ноя 2015, 22:42
- Откуда: Близко к Ставрополю
- Имя: Евгений
- Поблагодарили: 2 раза
Использование 2х ядер ESP32
Спасибо за блоки!!!
Перенёс на ядро 0 весь WEB и MQTT. Отклик почти мгновенный. Работает шустренько. На скорость работы яра 1 влияния не оказывают.
Но... от нестабильности ESP32 избавиться не получилось. ESP32 перегружается хаотично, может и пару суток отработать, может и за полчаса перегрузиться...
В любом случае, это шаг вперед!
Перенёс на ядро 0 весь WEB и MQTT. Отклик почти мгновенный. Работает шустренько. На скорость работы яра 1 влияния не оказывают.
Но... от нестабильности ESP32 избавиться не получилось. ESP32 перегружается хаотично, может и пару суток отработать, может и за полчаса перегрузиться...
В любом случае, это шаг вперед!
-
- Подполковник
- Сообщения: 1202
- Зарегистрирован: 14 фев 2016, 14:16
- Откуда: kazahstan
- Благодарил (а): 32 раза
- Поблагодарили: 6 раз
Использование 2х ядер ESP32
у вас есп32 еще что-нибудь делает ?типа управляет реле например где нагрузка?
-
- Сержант
- Сообщения: 269
- Зарегистрирован: 18 ноя 2015, 22:42
- Откуда: Близко к Ставрополю
- Имя: Евгений
- Поблагодарили: 2 раза
Использование 2х ядер ESP32
Нет. Обслуживание дисплея + пяток датчиков...vovka1973 писал(а): 31 авг 2021, 19:05 у вас есп32 еще что-нибудь делает ?типа управляет реле например где нагрузка?
-
- Подполковник
- Сообщения: 1202
- Зарегистрирован: 14 фев 2016, 14:16
- Откуда: kazahstan
- Благодарил (а): 32 раза
- Поблагодарили: 6 раз
Использование 2х ядер ESP32
просто подумал может из за помех перезагружается
У меня перезагружалась если связь рвалась с модемом , перенес поближе модем к есп и все перезагрузки закончились 18 дней уже . до этого с помехами боролся даже по датчикам температуры проходила . помогла переразводка земли.
-
- Сержант
- Сообщения: 269
- Зарегистрирован: 18 ноя 2015, 22:42
- Откуда: Близко к Ставрополю
- Имя: Евгений
- Поблагодарили: 2 раза
Использование 2х ядер ESP32
Кстати, ESPUI-Мультиблок от Naladchik, работает только версии 1.3 и ниже. Использование версии 1.4 или 1.5 приводит к циклической перезагрузке контроллера...
-
- Полковник
- Сообщения: 3357
- Зарегистрирован: 24 дек 2016, 16:55
- Откуда: Уфа
- Имя: Айдар
- Благодарил (а): 12 раз
- Поблагодарили: 100 раз
- Контактная информация:
Использование 2х ядер ESP32
Вы с этими блоками использовали его?JonyBest писал(а): 01 сен 2021, 19:30 Кстати, ESPUI-Мультиблок от Naladchik, работает только версии 1.3 и ниже. Использование версии 1.4 или 1.5 приводит к циклической перезагрузке контроллера...
Без блоков нормально?
-
- Сержант
- Сообщения: 269
- Зарегистрирован: 18 ноя 2015, 22:42
- Откуда: Близко к Ставрополю
- Имя: Евгений
- Поблагодарили: 2 раза
Использование 2х ядер ESP32
Да, да - версии 1.3 ESPUI-Мультиблок от Naladchik работает вполне стабильно. Я писал Naladchik в теме, что его блоки выше версии 1.3 не корректно работают с диспетчером задач от от ecoins, видимо у беды один корень...
Отправлено спустя 42 минуты 11 секунд:
Провел преинтереснейший эксперимент. ВиФи отключен. Пустой проект, Две задачи, разделенные на два ядра, в каждой задаче диспетчер от ecoins для контроля скорости цикла для наблюдения логическим анализатором. Загрузка ядра 0 Загрузка ядра 1 На сколько я понял, ESP32 оснащена двумя одинаковыми по мощности 32-битными микропроцессорами Xtensa LX6
Не понятно чем озадачено ядро 0?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Капитан
- Сообщения: 908
- Зарегистрирован: 04 окт 2015, 19:10
- Откуда: Новосибирск
- Имя: Павел
- Благодарил (а): 20 раз
- Поблагодарили: 22 раза
Использование 2х ядер ESP32
И не будут (по крайней мере в ближайшее время из за проблем с редактором блоков) , т.к для них он даром не нужен. Скомпоновали блоки интерфейса на одну плату без каких либо условий, связали их с логикой клеммами и переменными, а уже логику разбивайте на задачи менеджером как душе угодно. И никаких проблем с этими блоками не будет.JonyBest писал(а): 01 сен 2021, 21:26 Я писал Naladchik в теме, что его блоки выше версии 1.3 не корректно работают с диспетчером задач от от ecoins
Использование 2х ядер ESP32
Как по мне так вся прелесть ЕСП32 в том что WiFi работает на одном ядре а Ваш код на другом....думаю не стоит в ядро которое отвечает за ВиФи что то еще пихать....где то читал что это специально сделано для стабильности как ВиФи, так и основного кода
-
- Полковник
- Сообщения: 3357
- Зарегистрирован: 24 дек 2016, 16:55
- Откуда: Уфа
- Имя: Айдар
- Благодарил (а): 12 раз
- Поблагодарили: 100 раз
- Контактная информация:
Использование 2х ядер ESP32
Просто меру надо знать, не надо загружать излишне!Anydy писал(а): 02 сен 2021, 07:11 Как по мне так вся прелесть ЕСП32 в том что WiFi работает на одном ядре а Ваш код на другом....думаю не стоит в ядро которое отвечает за ВиФи что то еще пихать....где то читал что это специально сделано для стабильности как ВиФи, так и основного кода
Нужно экспериментировать.
- Phazz
- Полковник
- Сообщения: 3109
- Зарегистрирован: 17 окт 2016, 15:38
- Откуда: Сургут
- Имя: Анатолий
- Благодарил (а): 228 раз
- Поблагодарили: 107 раз
Использование 2х ядер ESP32
[ref=#aa0000]Anydy[/ref], очень даже нужно. Например подселить к нему вэб интерфейс и телеграмм. А быстрый код пусть работает на 1 ядре.
-
- Сержант
- Сообщения: 269
- Зарегистрирован: 18 ноя 2015, 22:42
- Откуда: Близко к Ставрополю
- Имя: Евгений
- Поблагодарили: 2 раза
Использование 2х ядер ESP32
[ref=#000080]aidar_i[/ref], Подскажите как на Ваших блоках сделать две задачи на ядре "0". Есть желание чтобы одна задача удалилась по условию, а вторая продолжала работать...
-
- Полковник
- Сообщения: 3357
- Зарегистрирован: 24 дек 2016, 16:55
- Откуда: Уфа
- Имя: Айдар
- Благодарил (а): 12 раз
- Поблагодарили: 100 раз
- Контактная информация:
Использование 2х ядер ESP32
Просто поменяйте в блоке ESP32_Task1_Core0 номер задачи везде и в названии тоже, создайте новый блок. Где увидете Task1 поменяйте на Task1_1, например.JonyBest писал(а): 02 сен 2021, 20:17 [ref=#000080]aidar_i[/ref], Подскажите как на Ваших блоках сделать две задачи на ядре "0". Есть желание чтобы одна задача удалилась по условию, а вторая продолжала работать...
В 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 хватило.
-
- Полковник
- Сообщения: 3357
- Зарегистрирован: 24 дек 2016, 16:55
- Откуда: Уфа
- Имя: Айдар
- Благодарил (а): 12 раз
- Поблагодарили: 100 раз
- Контактная информация:
Использование 2х ядер ESP32
Исполнение функции loop() не обходится без «пожирания» ресурсов.
Просто используя задачу с for(; ;) вместо Loop мы ускоряем работу контроллера.
Даже использовав while(1) мы ускоряемся на 20 %:
void setup() {
}
void loop() {
while(1) {
код исполняемый;
}
}
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя