А что это за платформа такая:
"Библиотека, предоставляющая базовые функции для использования чипов/модулей DW1000 от Decawave с Arduino"??
Это код для работы с DW1000. Для измерения расстояния между двумя приёмо-передатчиками с точностью не хуже 10 см (заявлена производителем) и дальностью до 200-300 м.
Это ведь специализированный модуль со своими специфическими библиотеками.
Его рассматривать то надо имея знания по соответствующим микросхемам/МК, там применяемым...
Это
готовый проект кода для DW1000. На youtube есть ролики пользователей, которые использовали его и получали примерно заявленную точность. "Знание применяемых микросхем" - это юзер-мануал на более чем сотню регистров. Со сложным и запутанным программированием. Хочется взять этот проект и портировать его на свой МК. А не устраивать "закат солнца вручную" длительностью в несколько месяцев самостоятельных кувырканий с нуля. С негарантированным результатом.
Но после даже поверхностного анализа кода этого проекта, заметил, что функция обработчика прерываний handleInterrupt() в этом проекте обращается ко множеству разделяемых ресурсов (глобальные переменные, SPI-канал и т.п.) параллельно фоновому процессу в loop().
Без каких-либо видимых средств синхронизации/cериализации доступа. Что недопустимо в принципе. Или я не вижу этих средств синхронизации/cериализации. Тогда просьба - указать мне на них.
Т.е. - допустимо такое только если handleInterrupt() будет вызываться платформой ардуино из контекста фонового процесса loop(), а не из контекста аппаратного ISR. Отсюда и возник исходный вопрос.
Судя по роликам на youtube, код должен прекрасно работать.
PS: Ещё раз повторяю для нечитающих исходный вопрос: Я не спрашиваю как правильно делать! Не спрашиваю как работать с прерываниями и в многопоточной среде. И не просил меня поучать на эту тему. Я это сам прекрасно знаю и умею писать код для МК. Может даже получше вас, поучатели.
Мой вопрос только о том:
Как в среде ардуино реализовано исполнение пользовательского обработчика handleInterrupt()? Всё! Не более. Не знаете - проходите мимо.
Добавлено after 9 minutes 48 seconds:Если простенькое UNO(нано или про-мини) то структура программы к примеру по симулятору
Судя по коду того проекта, handleInterrupt() должен вызываться подобно serialEventRun() из вашего примера.
Иначе проект будет неработоспособным.