|
|
  |
Креативный вопрос, Прерывания в ARM (RTOS) |
|
|
|
Mar 5 2013, 03:03
|
Частый гость
 
Группа: Участник
Сообщений: 91
Регистрация: 26-05-10
Пользователь №: 57 544

|
Есть процессор с операционкой RTOS, но не стандартной, а специально написанной производителем под этот камень. Есть таблица прерываний, где четвертым значится "Abort Function".
При очень странных обстоятельствах программа вылетает с этим прерыванием: при определенной конфигурации портов I/O все ОК, а при небольшом переконфигурировании, которое вообще говоря никак влять не должно, возникает это прерывание и все умирает.
Есть только простенький пуританский дебаггер, который работает по настроению. Так же известен адрес, на котором спотыкается прога, но туда breakpoint не поставить - рушится отладчик. Да, он классный.
Вопрос: Как можно отловить ПРИЧИНУ этого прерывания? В мане описания не нашел. То есть мне надо узнать почему такое прерывание может появиться - из-за переполнения стека/памяти/еще чего, чтобы копать уже туда.
|
|
|
|
|
Mar 5 2013, 06:35
|
Частый гость
 
Группа: Участник
Сообщений: 91
Регистрация: 26-05-10
Пользователь №: 57 544

|
Да, прошу прощения. ARM11. ОС нестандартная - потому что под эту операционку производителем написано огромное количество нетривиального "demo" кода, которое используется в проекте. Портировать на другую ОС очень много времени требует, да и незачем, вроде как и эта устраивает. SP перед функцией, откуда возникает Abort, в порядке. Все адреса функций совпадают с map-файлом, дизассемблер дает по этим адресам их нормальный текст.
Сообщение отредактировал IgorKossak - Mar 5 2013, 20:55
Причина редактирования: бездумное цитирование
|
|
|
|
|
Mar 5 2013, 10:00
|
Частый гость
 
Группа: Участник
Сообщений: 91
Регистрация: 26-05-10
Пользователь №: 57 544

|
Цитата(jcxz @ Mar 5 2013, 14:14)  Ну так раз Вы прочитали про тип исключения, функцию в которой оно возникает и стековый фрейм - не составит труда определить место в коде где оно происходит.
ЗЫ: С ARM11 не имел дела к сожалению Тут немного путаннее получается. Я знаю функцию, без которой прерывание не возникает. Значит дело где-то внутри нее, но в ней есть еще два вложения вызовов - где именно неизвестно, отладчик туда не заходит и брейк не ставит, виснет или приложение генерит исключение сразу. И даже если бы известно было точное место кода это ничем бы не помогло: коды все рабочие (в другой конфигурации портов все равботает как надо), дизассемблерирование нормальное, адреса нормальные. Цитата(aaarrr @ Mar 5 2013, 14:31)  Если процессор попадает в Prefetch Abort, проверьте состояние IFSR. о, точно, спасибо!
|
|
|
|
|
Mar 6 2013, 04:12
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Я наверное не селен в работе с операционками, но когда я начинал в дремучие года ЖТАГИ стоили по 700 баксов, а зарплаты были оп 200. Потому все прекрасно обходились без жетага.
Отладка идет так. Поднимаете ком порт(блютус, вифи, езернет, любое средство коммуникации) и через него шлете информацию на терминал. Если у вас локализована функция в которой происходит беда. Вставьте туда посылку "эту строчку прошла" и двигайте ее по функции до тех пор пока сообщение не перестанет приходить. Таким образом вы точно локализуете место, а дальше можно послать аргументы, регистры, значения, адреса, да что хочешь... Свет клином на жетаге не сошелся..
В чем проблема? или я чего то не понимаю?
П.С. Раньше любой проект начинали с наладки связи по ком порту, да я и сейчас так часто делаю, даже прошу в схемах учитывать эту возможность, отладка с сообщениями иногда работает на порядок лучше ЖЕТАГА со всеми его брекпоинтами...
|
|
|
|
|
Mar 6 2013, 04:37
|
Частый гость
 
Группа: Участник
Сообщений: 91
Регистрация: 26-05-10
Пользователь №: 57 544

|
КОМ порт налажен конечно. Место мне известно. Нужна причина...
Сообщение отредактировал IgorKossak - Mar 6 2013, 07:33
Причина редактирования: бездумное цитирование
|
|
|
|
|
Mar 7 2013, 05:36
|
Частый гость
 
Группа: Участник
Сообщений: 91
Регистрация: 26-05-10
Пользователь №: 57 544

|
Цитата(kolobok0 @ Mar 6 2013, 19:16)  +100 и даже обычный светодиод подходит для ловли и более крутых заморотов. всё дело в упорстве, умении и времени на это затраченное. мда уж, светодиодом отлаживать медиаприложение как-то слишком уж сурово даже для челябинца
|
|
|
|
|
Mar 7 2013, 12:17
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
что можно отладить жетагом, то можно и диодом, что нельзя диодом, не отладите и жетагом. И тут не в суровости дело, а в подходе. Если вы пишите программу зная как она работает, что за чем и когда она делает, вы легко справитесь диодом. Если вы набрали кучу исходников, от студентов, друзей, форумчан, и ворованные библиотеки, все это засунули в один проект и запустили, вы это не отладите ничем...
А дальше все зависит от того для кого вы пишите и чем отвечаете за сбои....
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|