Платы ESP32 выпускаются с двумя микропроцессорами Xtensa 32-bit (0 и 1), то есть они двухъядерные. При запуске кода из Arduino IDE, по умолчанию используется ядро 1. В данном руководстве мы рассмотри, как запускать код на втором ядре параллельно с первым.
Примечание: Не обязательно использовать второе ядро для мультизадачности.
7 комментариев. Оставить новый
” 0); /* Указываем пин для данного ядра */”
Наверно всёже /*Указываем ядро для этой задачи*/”
Вопрос. Правильно ли я понимаю, если ядро 1 – по умолчанию для скетча, то ядро 0 не должно тупо простаивать и по умолчанию скорее всего занято обработкой системного кода связанного с WiFi/Bluetooth и чего-то ещё?
ошибка
‘xPortGetCoreID’ was not declared in this scope
А на каком ядре будут выполняться прерывания? Допустим таймер – на том на котором он был запущен, на случайном или 1?
Здравствуйте!
Прерывания в ESP32 могут выполняться на любом из двух доступных ядер. Обычно, по умолчанию, прерывания обрабатываются на ядре 0, так как это основное ядро, на котором работает операционная система.
Является ли Serial потокобезопасным? В “обычной” ардуиновской библиотеке нет, возможно здесь по-другому. Но в первом случае требуется мьютекс или просто спин-лок на проверке флага занятости (объявленного volatile).
Здравствуйте! Нет, Serial не является потокобезопасным, для гарантии безопасности лучше использовать мьютексы. В этом примере мы пренебрегли этим правилом, так как мы используем Serial только один раз при старте потока, но для программ, где это критично важно, определенно лучше использовать мьютексы.