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

 
 
> uC/OS-II и PREFETCH ABORT exception
gbcz
сообщение Feb 3 2009, 14:15
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 2-06-08
Пользователь №: 37 992



Здравствуйте, уважаемые.
При работе с TCP-стэком в uC/OS-II постоянно происходит PREFETCH ABORT exception. Может быть кто-нибудь знает, от чего это происходит (видел кто-то писал о ретаргетинге библиотек, но невнятно) или как это можно обрабатывать?
Компилятор Keil.
Процессор LPC2378.
Заранее благодарен.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Feb 3 2009, 14:33
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(gbcz @ Feb 3 2009, 17:15) *
как это можно обрабатывать?

Смотрите LR_abt и содержимое стека того режима, в котором случился аборт.
Go to the top of the page
 
+Quote Post
gbcz
сообщение Feb 3 2009, 15:14
Сообщение #3





Группа: Новичок
Сообщений: 6
Регистрация: 2-06-08
Пользователь №: 37 992



Цитата(aaarrr @ Feb 3 2009, 17:33) *
Смотрите LR_abt и содержимое стека того режима, в котором случился аборт.


Можно пояснить, что такое LR_abt?
Если имеется ввиду R14, то в нём мусор.

По поводу режимов. uC/OS работает в режиме супервизора. Когда случается аборт - проц переходит в режим аборт.
Может посоветуете, как в этом режиме смотреть содержимое стэка супервизора?
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Feb 3 2009, 17:21
Сообщение #4


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Не должно там быть мусора.
Ставте точку останова прямо на входе в аборт.
Замечал что LR (R14) по какой-то причине теряет свое настоящее значение сразу после первых тактов выполения команд в режиме аборта, в ARM9 правда.



Цитата(gbcz @ Feb 3 2009, 17:14) *
Можно пояснить, что такое LR_abt?
Если имеется ввиду R14, то в нём мусор.

По поводу режимов. uC/OS работает в режиме супервизора. Когда случается аборт - проц переходит в режим аборт.
Может посоветуете, как в этом режиме смотреть содержимое стэка супервизора?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 3 2009, 17:35
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(AlexandrY @ Feb 3 2009, 20:21) *
Не должно там быть мусора.

Если уж случился prefetch abort, то может. Загрузили PC неизвестно откуда, вот и результат.

Цитата(AlexandrY @ Feb 3 2009, 20:21) *
Замечал что LR (R14) по какой-то причине теряет свое настоящее значение сразу после первых тактов выполения команд в режиме аборта, в ARM9 правда.

Что-то странное, никогда такого не видел ни на 7-х, ни на 9-х.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Feb 3 2009, 19:22
Сообщение #6


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Не так много мест в адресном пространстве ARM-ов куда может залететь программа чтобы теряться в догадках.
В LR должен строго быть адрес последней инструкции в нескольких тактах от которой произошел сбой.
Ставите брекпоинт там и перехватываете ситуацию до аборта.
По содержимому рабочих LR и стека узнаете как минимум из какой задачи произошел сбой и что перед этим вызывалось.
Передвигая брекпойнт за пару итераций точно находите где что-то пошло не так.
Если причина в испорченом содержимом памяти, то брекпоинты можно поставить и по событию записи в память и точно узнать откуда произошла нелегальная запись
Короче проблема не больше чем на почаса при любом раскладе.
Главное что она стабильно воспроизводима.


Цитата(aaarrr @ Feb 3 2009, 19:35) *
Если уж случился prefetch abort, то может. Загрузили PC неизвестно откуда, вот и результат.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 3 2009, 20:29
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(AlexandrY @ Feb 3 2009, 22:22) *
В LR должен строго быть адрес последней инструкции в нескольких тактах от которой произошел сбой.

В LR_abt будет адрес инструкции (точнее, адрес инструкции + 4), которую процессор уже не смог выбрать. Это с data abort все легко, а в случае prefetch abort/unknown instruction содержимое LR_abt может ничем не помочь.

А вот LR режима, в котором случился сбой, может дать какую-то зацепку. Впрочем, он вполне может указывать на недра стандартных библиотек или процедур ОС, вызываемых из тысячи мест.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Feb 3 2009, 21:02
Сообщение #8


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



wink.gif Перебор в слове "тысячи"
Еслиб все было так сложно реверсинженеры бы все посходили с ума.
Не понял почему вы видите трудность в том что сбойнула выборка инструкци и не данных.
Адрес того места все равно остается адресом и искать надо начинать от туда.
Даже если поиски увели в библиотечную функцию, то по MAP файлу ее название легко вычисляется.
Мест откуда вызывается библиотечная функция любая очень редко когда превышает десяток-другой.
А обычно одно только название функции уже дает ключ к понятию проблемы.
Поэтому я и оцениваю поиск в полчаса, а не в 5-ть минут biggrin.gif

Другое дело, что prefetch abort обычно симптом плохо инициализированного контроллера памяти или PLL, что ведет к сбоям при чтении FLASH
и сносит крышу на самой шине AHB.
Тут значит сбои должны проявляться еще где-то. Только нам не говорят biggrin.gif

Цитата(aaarrr @ Feb 3 2009, 22:29) *
В LR_abt будет адрес инструкции (точнее, адрес инструкции + 4), которую процессор уже не смог выбрать. Это с data abort все легко, а в случае prefetch abort/unknown instruction содержимое LR_abt может ничем не помочь.

А вот LR режима, в котором случился сбой, может дать какую-то зацепку. Впрочем, он вполне может указывать на недра стандартных библиотек или процедур ОС, вызываемых из тысячи мест.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- gbcz   uC/OS-II и PREFETCH ABORT exception   Feb 3 2009, 14:15
|- - aaarrr   Цитата(gbcz @ Feb 3 2009, 18:14) Если име...   Feb 3 2009, 15:22
|- - aaarrr   Цитата(AlexandrY @ Feb 4 2009, 00:02) Не ...   Feb 3 2009, 21:18
- - gbcz   Ситуация немного проясняется. Операционка работает...   Feb 4 2009, 08:44
|- - aaarrr   Цитата(gbcz @ Feb 4 2009, 11:44) В регист...   Feb 4 2009, 09:01
- - gbcz   Тем, кто столкнулся с описанной выше проблемой, мо...   Feb 9 2009, 12:37
- - Andy Mozzhevilov   Скорее всего у вас банальная нехватка стека для ка...   Feb 10 2009, 04:59
- - gbcz   В связи с чрезвычайной удобностью uC/OS и необходи...   Mar 18 2009, 11:34
- - Andy Mozzhevilov   Стеки можно было посмотреть и в Кейл, правда не та...   Mar 18 2009, 14:04
- - TanT   Andy Mozzhevilov, где достать эту примочку для IAR...   Mar 19 2009, 12:53
- - Andy Mozzhevilov   Она по моему в комплект IAR уже включена, во всяко...   Mar 19 2009, 14:21


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 04:27
Рейтинг@Mail.ru


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