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

 
 
> Креативный вопрос, Прерывания в ARM (RTOS)
elusive
сообщение Mar 5 2013, 03:03
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 26-05-10
Пользователь №: 57 544



Есть процессор с операционкой RTOS, но не стандартной, а специально написанной производителем под этот камень.
Есть таблица прерываний, где четвертым значится "Abort Function".

При очень странных обстоятельствах программа вылетает с этим прерыванием:
при определенной конфигурации портов I/O все ОК, а при небольшом переконфигурировании, которое вообще говоря никак влять не должно, возникает это прерывание и все умирает.

Есть только простенький пуританский дебаггер, который работает по настроению.
Так же известен адрес, на котором спотыкается прога, но туда breakpoint не поставить - рушится отладчик. Да, он классный.

Вопрос:
Как можно отловить ПРИЧИНУ этого прерывания? В мане описания не нашел.
То есть мне надо узнать почему такое прерывание может появиться - из-за переполнения стека/памяти/еще чего, чтобы копать уже туда.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
jcxz
сообщение Mar 5 2013, 04:20
Сообщение #2


Гуру
******

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



Сто раз тут уже писалось - УКАЗЫВАЙТЕ КАКОЙ КОНКРЕТНО CPU
Здесь не телепаты....
Вероятно у вас ARM7 или ARM9.
Тогда у вас возникает "Prefetch Abort". В описании на ядро расписано, что это такое и когда возникает.
Скорей всего - у вас выполнение кода улетает куда-то в недопустимое место и оттуда делается попытка чтения несуществующей памяти.
Отловить точку откуда улетает может быть довольно сложно даже с нормальным jtag-ом.
Хорошо если улёт произошёл по BL-команде, тогда можно посмотреть регистр LR и стек раскрутить.
Если же улёт произошёл по обычному branch или выборке из стека неверной точки возврата (наиболее вероятный случай), либо выборке адреса ISR из неверного места таблицы прерываний, то найти будет трудно.
Восстановите контекст который был перед Abort (по SPSR) и анализируйте содержимое регистров (особенно SP) и режим процессора в точке Abort.

PS: А зачем собственно юзать эту "нестандартную" ОС если есть куча "стандартных"?
Go to the top of the page
 
+Quote Post
elusive
сообщение Mar 5 2013, 06:35
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 26-05-10
Пользователь №: 57 544



Да, прошу прощения.
ARM11.

ОС нестандартная - потому что под эту операционку производителем написано огромное количество нетривиального "demo" кода, которое используется в проекте. Портировать на другую ОС очень много времени требует, да и незачем, вроде как и эта устраивает.

SP перед функцией, откуда возникает Abort, в порядке. Все адреса функций совпадают с map-файлом, дизассемблер дает по этим адресам их нормальный текст.

Сообщение отредактировал IgorKossak - Mar 5 2013, 20:55
Причина редактирования: бездумное цитирование
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 29th June 2025 - 06:36
Рейтинг@Mail.ru


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