Arm cortex-M4 выходит из строя из-за сбоя

#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.