В специальном состоянии я испытываю исключение из hardfault. ICSR указывает, что это эскалация из systick (ожидающее исключение = 15).FreeRTOS ARM cortex hardfault escalation from systick
- Любые идеи, как это произойдет?
Я предполагаю, что это какой-то мертвый замок.
- Любые рекомендации по отслеживанию этого (без Atmel Studio)?
Я пользуюсь FreeRTOS 7.5.2.
UPDATE:
Я добавил еще несколько регистр ошибки в выходной дамп. Так что это действительно ошибка шины с SysTick прерывания в ожидании:
EXCEPTION HANDLER
- ICSR active exception: 3
- ICSR pending exception: 15
- ICSR pending interrupt: 0
- Hardfault status: 0x40000000
- Memory fault status: 0x00
- Bus fault status: 0x04
- Usage fault status: 0x0000
Я был в состоянии отследить исключение вызова Freertos:
vTaskDelay(10/portTICK_RATE_MS);
Приложение имеет 2 задачи:
- Задача с приоритетом 2 (параметр xTaskCreate)
- Задача с приоритетом 1
Задачи 1 входят в зону, заблокированную семафором, и попадают в указанную выше линию. Задача 2 должна просыпаться и запускаться, пока она также не захочет войти в заблокированную область.
Просто потому, что ошибка шины связана с ожиданием работы системы, это не значит, что это имеет какое-либо отношение к работе. Состояние жесткого диска - принудительное, а ошибка - IMPRECISERR (неточная ошибка данных). Я настоятельно рекомендую вам прочитать ссылку Ричарда ниже, в частности, «Обработка неточных ошибок».Когда vTaskDelay вызывается, ОС отключается в другом месте. Я подозреваю, что проблема происходит где-то совершенно иначе, чем вы думаете! –