Delphin911
Да, но не все так просто. При синхронизации двух коров желательно использовать очереди.
По поводу loop().
ESP32 работает не как ардуино.
Для поддержки иллюзии, что это тоже самое, в таске FreeRTOS вызывает пользовательскую функцию setup() перед стартом бесконечного цикла таска, а loop() вызывается внутри этого бесконченого цикла.
Т.е. имитируется один процессор для симуляции ардуино.
В твоем случае ты в setup() создаешь еще один таск но на другом коре процессора. В функции которая будет играть роль таска сначала делаешь сетап нужного сенсора, затем в
while(1)
{
}
вставляешь в тело бесконечного цикла работу с сенсором и небольшую задержку, чтобы не ругался WatchDog.
Создаешь так же очередь на 1 или 2 поля, в которую передаешь либо структуру либо переменную которую хочешь передавать другому таску, так полностью безопасно.
Чтение же глобальных переменных можно делать если один таск пишет атомарно, но чтобы не заморачивать тебе голову этим и семафорами - проще просто перекидывать через очередь.
По ссылке выше видно, как можно читать с очереди данные. Как можно ждать их в ней определенный период или вообще не ждать или ждать бесконечно.
Обычно каждая часть работы программы может быть оформлена как таск.
Например ты создаешь таск чтения данных с сенсора и он кидает их в очередь. Можно создать структуру в которой первое поле - это вид сообщения в очереди, а дальше структура данных для передачи, например.
Для дисплея, бегущей строки и прочего - отдельный таск который получает сообщение и начинает показывать эти данные, третий таск для работы с вторым типом сенсора, четвертый для выброса данных на сервер или чтения с него чего-то и так далее.
Между ними можно ставить очереди, а можно иметь глобальные данные и каждый раз когда пишешь или читаешь закрывать к ним доступ семаформо (Почитай про них там же на сайте)
Я вообще использую чистый FreeRTOS, но если лениво и хочется просто взять библиотеки, то таски создаются в setup() а loop() просо убивает сам себя (стандартный таск ардуино) и все, бегут только твои таски.
Главное не забывай, что железо в библиотеках ардуино написано в расчете на один таск и попытка работать с одним и тем же сенсором может убить программу.