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

 
 
> 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
Ответов (1 - 8)
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
Grizzzly
сообщение Jun 5 2014, 08:35
Сообщение #5


Знающий
****

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



Цитата(demiurg_spb @ Jun 5 2014, 16:35) *

Спасибо, сейчас посмотрю.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 5 2014, 10:52
Сообщение #6


Гуру
******

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



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

Не путайте человека. У него ARM7, а вы ему про Cortex-M.
В ARM7 никакого HardFault в принципе нет.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 6 2014, 04:28
Сообщение #7


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

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



Цитата(jcxz @ Jun 5 2014, 19:02) *
Принято.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
ig_z
сообщение Jun 6 2014, 04:49
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551



QUOTE (Grizzzly @ Jun 5 2014, 13:50) *
Пытаюсь найти ошибку, приводящую к prefetch abort.


У микриума в примерах есть(был) обработчик с раскруткой стека и выводом в консольку значений регистров.
Go to the top of the page
 
+Quote Post
Grizzzly
сообщение Jun 6 2014, 07:49
Сообщение #9


Знающий
****

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



Цитата(ig_z @ Jun 6 2014, 12:59) *

Благодарю. Нашел.
Go to the top of the page
 
+Quote Post

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

 


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


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