реклама на сайте
подробности

 
 
> Prefetch abort
Grizzzly
сообщение Jun 5 2014, 06:40
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748



Пытаюсь найти ошибку, приводящую к prefetch abort. После остановки программы в отладчике прочитал регистры. R13 для SVC, FIQ, IRQ не превосходит границы областей, выделенных под соответствующие стеки. То есть их переполнения нет. При этом PC = FC13FFFC. Огромное число, которого не может быть. R14 = 00000000 в режиме SVC, в других режимах - огромные числа. Так, R14_abt = 20000097 (как он получился нечетным?). Поэтому SUBS PC,R14_abt,#4 не помогает. Таких огромных адресов нет.
Как в данном случае понять, где возникает ошибка?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
jcxz
сообщение Jun 5 2014, 07:16
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Останавливаете после уже "улёта" в неизвестность?
В этом случае - толку от содержимого регистров ==0.
До того как вы нажали HALT в отладчике, CPU уже успел выполнить неск. миллионов инструкций, и многократно переписал эти регистры.

Такую ошибку отловить сложно и очень долго и муторно.
Хотя вроде есть Tracer-ы, которые умеют запоминать сколько-то последних инструкций и отматывать назад. Но стоят жорого и требуют особенного подключения для себя (Trace).

Когда у меня были подобные проблемы, приходилось использовать таймер с высокочастотным прерыванием:
Так скажем с частотой 1МГц (или чаще) вызывалась ISR и писала в буфер содержимое регистров и стека.
И проверяла некоторые условия - например - нахождение SP и PC в пределах некоторых значений с остановом если
вышли за диапазон.
Go to the top of the page
 
+Quote Post
Grizzzly
сообщение Jun 5 2014, 07:22
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748



Спасибо за ответ.
Цитата(jcxz @ Jun 5 2014, 15:26) *
Останавливаете после уже "улёта" в неизвестность?

Здесь отладчик собственный, нестандартный. Он только для данного процессора, который аналогичен ARM7. Так вот отладчик останавливает программу автоматически и выдает сообщение об ошибке. Но, думаю, вы правы. Всё равно какието инструкции выполняются за это время.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 5 2014, 08:25
Сообщение #4


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Grizzzly @ Jun 5 2014, 15:32) *
За все ARMV7 не скажу, а для ARMV7-M можно написать обработчик прерывания HardFault и там вывести в консоль значения регистров и их проанализировать.
Вот тут внятно описано как.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 05:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01396 секунд с 7
ELECTRONIX ©2004-2016