#arm #gnu
#arm #gnu
Вопрос:
Мы получаем исключение, а lr равен 0xFFFFFFF1. Это означает, что мы должны cmp msp и psp. Теперь адрес равен 0x2000E8D0. Это указатель стека.
Чем я получаю :
printf(" - Forced Hard fault.n")
printf(" - MMAR holds an invalid address.n");
printf(" - BFAR holds an invalid address.n");
printf(" - Attempted to execute an instruction that makes illegal use of the EPSR.n");
printf(" - The processor has attempted to execute an undefined instruction.n");
Что я могу сделать сейчас, чтобы исправить ошибку дальше? Я интерпретировал некоторые значения вокруг указателя стека, но не смог найти никакого намека на ошибку.
Программа завершает работу после функции, которая вызывается из IRQ.
Комментарии:
1. Вы можете использовать обычные методы отладки, чтобы сузить код, вызывающий ошибку, в прямом направлении, а также работать в обратном направлении от ошибки. Значение lr просто означает, что вы находитесь в обработчике, который также означает, что при сбросе стека вы увидите кучу информации, включая адрес инструкции или рядом с ней, которая вызвала ошибку. Прочитайте документы arm, чтобы увидеть, что именно находится в стеке, должно быть легко выровнять его, когда вы увидите дамп по сравнению с документами.
2. Вы действительно не предоставили никакой информации, которая могла бы помочь здесь. Адрес разборки ошибки в этой области кода и какой высокоуровневый код сгенерировал его, предполагая, что он скомпилирован, и т.д.
3. С этой информацией должно быть легко увидеть ошибку.
4. Это так просто, только если весь ваш код является кодом. У нас много аппаратных конфигураций. SPI / UART DMA. Я нашел это, это была проблема с конфигурацией DMA.