Может ли ARM9 Prefetch Abort Exception быть программной проблемой? - PullRequest
3 голосов
/ 01 сентября 2009

Так что я получаю исключение "prefetch abort" в нашей системе arm9.Эта система не имеет MMU, так что в любом случае это может быть программная проблема?Все регистры кажутся мне правильными, и код выглядит правильным (не поврежденным) с точки зрения JTAG.

Сейчас я думаю, что это какая-то проблема с аппаратным обеспечением (хотя мне неприятно это говорить- аппаратная часть была в порядке до сих пор).

Ответы [ 2 ]

5 голосов
/ 01 сентября 2009

Какое именно исключение вы получаете?

В прошлый раз, когда это случилось со мной, я какое-то время шел по неверному пути, потому что я не понимал, что ARM "prefetch abort" означал предварительную выборку команды, а не предварительную выборку данных, и я просто играл с предварительной выборкой данных инструкции. Это просто означает, что программа попыталась перейти в несуществующую область памяти. (Фактическая проблема заключалась в том, что в загрузчике я набрал «go 81000000» как «go 81000».)

Смотри также:

3 голосов
/ 01 сентября 2009

По какому адресу запускается прерывание предварительной выборки. Это может произойти из-за того, что счетчик программы (ПК или R15) настроен на адрес, недопустимый на вашем микроконтроллере (это может произойти, даже если вы не используете MMU - адресное пространство микроконтроллера, вероятно, имеет «дыры» в это то, что вызовет прерывание предварительной выборки). Это также может произойти, если вы попытаетесь предварительно выбрать адрес, который будет неправильно выровнен, но я думаю, что это зависит от реализации микроконтроллера (ARM ARM отображает поведение как «UPREDICTABLE»).

На самом ли деле процессор находится в режиме прерывания? Если он выполняет обработчик предварительной выборки, но не находится в режиме прерывания, это будет означать, что некоторый код разветвляется через вектор прерывания предварительной выборки, как правило, по адресу 0x0000000c, но контроллеры часто позволяют переназначать векторные адреса.

...