|
Prefetch abort, туплю |
|
|
|
Jun 1 2009, 18:23
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(IgorMarx @ Jun 1 2009, 20:50)  А нескромный вопрос мона? Какая среда программирования? Какой язык программирования? Тут не боги заседают. Среда и язык программирования к проблеме и методам ее локализации не имеют ну ни малейшего отношения, уж поверьте. Цитата(IgorMarx @ Jun 1 2009, 20:50)  3. Аккуратно протопать отладчиком... Да-да, отладчиком. Падает оно во время "коннекта по CSD", что несколько ограничивает использование этого инструмента, не находите?
|
|
|
|
|
Jun 2 2009, 08:04
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(IgorMarx @ Jun 1 2009, 19:50)  3. Аккуратно протопать отладчиком..... Пока не надоест  Цитата Кстати, отладчик может предупреждать о переполнении стека. Нужно смотреть в окне отладочных сообщений. Особенно "полезная" фича, если используется, несколько переключаемых стеков, например, в операционных системах. Просто надо действительно смотреть при вылете регистры и стек (до сих пор мне 16 значений стека для разборок).
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 2 2009, 08:21
|

Местный
  
Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719

|
Цитата(SpiritDance @ Jun 1 2009, 11:24)  Вопрос. Я правильно понимаю что каким-то образом портится стек? Как это можно проверить и собственно как его можно попортить? Была у меня похожая проблема, при использовании вложенных прерываний. Так же вылетало в неопределенный момент времени. В стартапе в обработчике ошибочка была.
|
|
|
|
|
Jun 2 2009, 11:01
|

Местный
  
Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035

|
Цитата(aaarrr @ Jun 2 2009, 11:19)  LR_abt действительно слабо, а вот LR исходного режима - весьма сильно. Не согласен... Возможно иногда там и сохраняется, нормальный адрес возврата, но только если процессор не успел пробежаться по мусору или не встретил в этом мусоре ничего похожего на brunch. Когда процессор пошёл гулять по мусорным адресам из-за неинициализированного указателя, то первым гибнет корректное значение в LR регистре текущего режима. По крайней мере мне ниразу не удавалось из LR исходного режима вытянуть полезной информации при perfetch abort, всегда там был мусор. Другоe дело data abort
|
|
|
|
|
Jun 2 2009, 11:19
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(xelax @ Jun 2 2009, 15:01)  Не согласен... Возможно иногда там и сохраняется, нормальный адрес возврата, но только если процессор не успел пробежаться по мусору или не встретил в этом мусоре ничего похожего на brunch. Когда процессор пошёл гулять по мусорным адресам из-за неинициализированного указателя, то первым гибнет корректное значение в LR регистре текущего режима. Совершенно неубедительно. Во-первых, обычно процессор влетает в prefetch abort или undefined instruction на первой же инструкции после ошибочного перехода. Во-вторых, LR, естественно, не "гибнет первым делом", т.к. для этого нужно или выполнить инструкцию с Rd=LR, или же выполнить инструкцию BL.
|
|
|
|
|
Jun 3 2009, 10:08
|

Дух погибшего транзистора
   
Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288

|
Цитата(aaarrr @ Jun 1 2009, 11:41)  Для начала, крепко подумать, откуда на стеке может взяться "бешеный адрес начинающийся на 0xD8", иногда по числу удается понять, откуда оно пришло. Там на самом деле разный мусор. Число каждый раз непонятное, ни очем не говорящее. Цитата(aaarrr @ Jun 1 2009, 11:41)  Еще можно порекомендовать посмотреть содержимое LR того режима, из которого влетели в аборт. Смотрел. Влетаю явно из систем-режима, но в данном регистре вообще был нечетный адрес. Проблема была хитрой. Парсер от процессора ловил некоторую сигнатуру в данных и принимал ее за команду и... всё. Но она была явно не одна. Сейчас наблюдаю вылет по данным. Проблема в том что без отключенной оптимизации код вместе с сегментом констант и инициализированных данных не влезает в процессор. Соответственно под отладчиком посмотреть не получается - информация для него отсутсвует и он кажет хрень. Закомментировал некоторое количество кода и запустил без оптимизатора (none и low) - сбоев нет. Включаю оптимизатор и сбоит, причем точку вылета поймать пока не удается - в отладчике опять охинея, плюс он подвисает в самый неудачный момент. Программа без операционки, но с кучей конечных автоматов. Хорошо хоть проблема стабильно проявляется. Уарты все заняты и в консольку я выбросить ничего не могу, есть только вариант с USB. Однако непонятно как написав обработчик dataabort дотянутся до регистров system. Чтобы сделать такого чтоб добраться до истока проблемы? Мозг уже сломал. Цитата(IgorMarx @ Jun 1 2009, 20:50)  А нескромный вопрос мона? Какая среда программирования? Какой язык программирования? Тут не боги заседают. Не знаю чем поможет такое уточнение. Проц sams256 + IAR4.41A. Цитата(IgorMarx @ Jun 1 2009, 20:50)  Кстати, отладчик может предупреждать о переполнении стека. Нужно смотреть в окне отладочных сообщений. Угу. Это если ему будет угодно то да, покажет. Ну если конечно не зависнет.
--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
|
|
|
|
|
Jun 3 2009, 10:19
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(SpiritDance @ Jun 3 2009, 14:08)  Проблема в том что без отключенной оптимизации код вместе с сегментом констант и инициализированных данных не влезает в процессор И не надо ее отключать. Цитата(SpiritDance @ Jun 3 2009, 14:08)  Однако непонятно как написав обработчик dataabort дотянутся до регистров system. Просто переключиться в режим System. Цитата(SpiritDance @ Jun 3 2009, 14:08)  Чтобы сделать такого чтоб добраться до истока проблемы? Мозг уже сломал. Выкинуть отладчик, добавить нормальные обработчики abort'ов, и исследовать их вывод.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|