Вызов sd_temp_get приводит к ошибке FaultHandler |
|
Добавил(а) microsin
|
Никак не мог разобраться, почему вызов функции SoftDevice для измерения температуры sd_temp_get вызывает падение в FaultHandler, если это делать из обработчика таймаута APP_TIMER. Если же вызывать sd_temp_get просто из цикла main, или даже из другого обработчика прерывания (например из GPIOTE_IRQHandler), то тогда такой проблемы нет.
Оказалось причина в том, что функция sd_temp_get вызывалась из контекста слишком высокого приоритета обработки прерываний - выше, чем обработчик прерывания SoftDevice, который он назначил внутри себя для обработки прерывания TEMP_IRQn (вектор прерывания TEMP_IRQHandler).
У меня был назначен приоритет 2 для обработчика прерывания RTC1, который вызывал обработчик таймаута APP_TIMER. Такой приоритет вероятно оказался выше, чем приоритет обработки прерывания TEMP_IRQn, что и вызывало конфликт. После установки приоритета 6 для прерывания RTC1 проблема была устранена. |