• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Многозадачность. Использования ядра 0.

workpage

New member
У кого-нибудь есть положительный опыт использования обеих ядер с сетью?
Т.е. На ядре 0 - web сервер, а на ядре 1 - например mqtt.
Простые задачи, например со светодиодом работают, а как только дело доходит до сетевых функций - паника и reset.
Для затравки: читать тут
 

aZholtikov

Active member
У кого-нибудь есть положительный опыт использования обеих ядер с сетью?
Т.е. На ядре 0 - web сервер, а на ядре 1 - например mqtt.
Простые задачи, например со светодиодом работают, а как только дело доходит до сетевых функций - паника и reset.
Для затравки: читать тут
По моему опыту...
Ядро 0 - все связанное с сетью (WiFi, LAN, Web Server, MQTT etc...). Ядро 1 - дисплей, датчики, кнопки etc.
Так работает.
 

gromush

Member
Все библиотеки Arduino IDE написаны из расчета 1 потока, и не имеют защиты от многозадачного использования.
Ядро тут не причем, вся многозадачность должна быть поддержана на программном уровне.
У меня спокойно работает все при наличии полной защиты любого обращения к библиотекам с помощью бинарных семафоров.
 

enjoynering

Well-known member
У меня спокойно работает все при наличии полной защиты любого обращения к библиотекам с помощью бинарных семафоров.
а где почитать про это все? если ли ваши примеры на github, чтоб подсмотреть, научиться?
 

gromush

Member
Поищите в гугле, может чего и есть, я не искал. Моих примеров на гитхабе нет, я им не пользуюсь, у меня свой гит сервер.
Да и нечему тут особо учится.
Библиотека WiFi пока проблем не делала, и могу предположить, что на уровне ESP freeRTOS базовые функции изначально защищены, так как это по сути драйвер или HAL который должен иметь пакетные задания и очередь. Используют же скорее всего их, а библиотка просто адаптирована.
А вот на уровне сокетов уже надо ставить семафор.

Взять семафор
Код для отправки / приема данных
Отдать семафор.

Собственно все.
 

pvvx

Активный участник сообщества
При тике в 1 ms у RTOS потребление производительности CPU равносильно около 10..16 MHz.

Если код не лезет в кэш XIP Flash ESP32, то общая производительность двух ядер будет равна работе одного ядра Cortex M0 на 10..16 MHz. Причина в медлительности чтения SPI Flash, с которой выбираются коды и данные для CPU. SPI Flash в пределе обеспечивает поток в 100 Mbit/s. Это всего 12.5 Мегабайт. Команда CPU не 8-мь бит, а больше. Далее сами считаете и получаете, что второе ядро только мешает. Особенно для текущих библиотек SDK и Arduino – они громадны и кеша постоянно не хватает, а часть кода в IRAM мала.
При такой производительности уже сложно удерживать даже тайминги WiFi. А к ESP32 лепят ещё PSRAM. :)
Без RTOS у вас высвобождается хотя-бы 10 мега команд в сек и как-то можно удерживать WiFi тайминги по спецификации.
Так же вызывает удивление - пока CPU ESP32 ждет считывания кода с Flash - он жрет больше всего.
 
Сверху Снизу