• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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 - он жрет больше всего.
 
Сверху Снизу