Программирование ARM: решение проблем, FAQ Вызов sd_temp_get приводит к ошибке FaultHandler Wed, April 24 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Вызов 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 проблема была устранена.

 

Добавить комментарий


Защитный код
Обновить

Top of Page