2009-08-31 2 views
4

Итак, теперь я понимаю, что получаю исключение ARM Data Abort - я вижу, как заманить само исключение (плохой адрес в библиотеке STL), но я хотел бы вернуться назад кадр стека перед исключением. Я использую инструментальную цепочку IAR, и он говорит мне, что стек вызовов недоступен после исключения - есть ли уловка, чтобы убедить инструмент показать мне стек вызовов? Спасибо за всю быструю помощь!ARM Data Abort error exception debugging

ответ

6

, если вы посмотрите на ARM ARM (Справочное руководство по архитектуре ARM, просто «arm arm»), Model Programmers -> Режимы процессора и регистры. Когда вы находитесь в режиме прерывания, вы получаете привилегию, поэтому вы можете переключиться с отмены, чтобы сказать супервизор, а затем сделать копию r13, затем переключиться обратно в режим прерывания и выгрузить стопку из копии r13. Ваш r14 также сообщает вам, где произошло прерывание.

Я бы не удивился, если это прерывание было от выравнивания. Пытаясь прочитать/записать слово с адресом с чем-то другим, кроме нулей в младших двух битах или полусловом с lsbit набора адресов. Фактически, если вы берете реестр ссылок и дамп регистров (r0-r12), так как abort и user/supervisor используют одно и то же пространство регистров, вы можете посмотреть инструкцию, которая вызвала прерывание и адрес, чтобы увидеть, действительно ли это было проблема выравнивания или что-то еще. Обратите внимание, что pc - это одна, две или три инструкции вперед в зависимости от большого пальца режима или руки, у которой был прерван, если вы вообще не используете большой палец, но об этом не о чем беспокоиться.

+0

Определенно получить оружие, если вы еще этого не сделали. Это невероятная книга. Прерывание может происходить от выравнивания и в зависимости от того, как вы настроили свой mmu/mpu только незаконный адрес. Я использую базовое ядро ​​926ejs на основе OMAP, и на самом деле есть регистры, которые будут хранить адрес прерывания, поэтому обязательно проконсультируйтесь со спецификацией. – ThePosey

+0

Спасибо - я проверю, является ли проблема выравниванием или плохим указателем. Если это просто выравнивание, могу ли я вернуться из исключения? У меня есть ручка ARM, я буду изучать ее. – Jeff

+0

Думаю, вам нужно выяснить, почему это произошло. Если это выравнивание, то ловушка помогает вам не причинять вам вреда. Да, вы можете просто вернуться (к инструкции после проблемы), независимо от проблемы, но доступ к памяти, который он должен выполнить, не произойдет, и вы, скорее всего, потерпите неудачу в другом месте, потому что нужные вам данные не были прочитаны или написаны. Вы даже можете отключить прерывания данных выравнивания, но это просто затрудняет поиск реальной проблемы. –