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

 
 
> ARM7 вопрос, Условия попадния в Data abort
emerg_reanimator
сообщение May 26 2005, 07:03
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 69
Регистрация: 12-10-04
Пользователь №: 853



Добрый день

Подскажите при каких условиях ЦПУ попдает в этот режим? Углубление в описание на архитектуру (DDI0210B ARM7TDMI Rev.4) ясности не прибавило.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
d__
сообщение May 26 2005, 08:37
Сообщение #2


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

Группа: Свой
Сообщений: 197
Регистрация: 26-08-04
Пользователь №: 548



как правило ЦПУ состоит из ядра(в данном случае это arm7tdmi) и обвязки (генераторы чип селектов внешней памяти, менеджеры памяти и периферии). Ну так вот, когда обвязка определяет, что ядро планирует цикл обмена по адресу памяти, который данная обвязка не поддерживает иди адрес попадает в "запрещенный" регион(это решение принимает как правило MMU)обвязка генерирует сигнал abort для ядра. Вот цитата из пдф-ки от AT91M40XXX:
Abort Control The abort signal providing a Data Abort or a Prefetch Abort exception to the ARM7TDMI
is asserted in the following cases:
• When accessing an undefined address in the EBI address space
• When writing to a write-protected internal memory area on the AT91R40807
Здесь четко определены два случая при каких может возникнуть аборт:
1. Когда доступ происходит по неизвесному для EBI (обвязка) адресным пространствам.
2. Когда запись происходит в защищенный от записи регион AT91R40807...
Go to the top of the page
 
+Quote Post
emerg_reanimator
сообщение May 26 2005, 09:09
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 69
Регистрация: 12-10-04
Пользователь №: 853



Точно!

Вспомнил. В описании на LPC2124 тоже указывается в каких ситуациях ЦПУ попадает в это исключения.

Но вопрос возник по другому поводу.

На Olimex LPC E2124 происходит ошибочное измениение указателя стэка.
Код
...
OSStartHighRdy  

       MSR     CPSR_cxsf,#0xDF        ; Switch to SYS mode with IRQ and FIQ disabled
       
       BL      OSTaskSwHook           ; OSTaskSwHook();
...


После выполнения инструкции загрузки CPSR происходит обновление R14(SP). В стэк записывается значение адресса который указывает на несуществующую область памяти. И в итоге я попдаю в исключение по данным.

Такая ситуация происходит когда ЦПУ не нагрелся до рабочей температуры smile.gif
Go to the top of the page
 
+Quote Post
d__
сообщение May 27 2005, 10:54
Сообщение #4


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

Группа: Свой
Сообщений: 197
Регистрация: 26-08-04
Пользователь №: 548



Наверняка имеет место недопонимание некоторых особенностей архитектуры платформы ARM. Всегда необходимо помнить что для каждого режима работы процессора необходимо проинициализировать отдельную область стека и КАЖДЫЙ указатель стека, а они разные для каждого режима работы. Если этого не выполнить, тогда и появляются вышеописанные глюки...
Go to the top of the page
 
+Quote Post
emerg_reanimator
сообщение May 27 2005, 11:30
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 69
Регистрация: 12-10-04
Пользователь №: 853



Именно так уважаемый d__

Не инициализировался стэк в режиме System. После добавления инициализации ситуация исчезла.

Но обнаружилась другая фича. Под IAR 3.21a на Olimex LPC E2124 пытается крутится uCOS-II 2.76 + uCOS-View 1.10. Помаргивает диодами до момента пока я не открываю в отладчике C-spy окошко с регистрами контроллера прерываний (КП, VIC). После этого дейтвия, прерывания ЦПУ игнорируются (прерывания в ЦПУ разрешены, флаг готовности в регистре статуса КП установлен). Установленны два прерывания от TIMER0 и UART0.
Go to the top of the page
 
+Quote Post
d__
сообщение May 27 2005, 14:00
Сообщение #6


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

Группа: Свой
Сообщений: 197
Регистрация: 26-08-04
Пользователь №: 548



Не могу сказать ничего хорошего. Скорее всего если отладчик влезает в регистры управления контроллером прерывания, то возможно нарушение нормальной работы изза того что некоторые регистры во время считывания могут изменить состояние контроллера прерывания(сдвиг приоритетов или сброс каких-либо битов состояния). Другая версия звучит примерно так, при вводе процессора в режим отладки процессор прекращает выполнение программы...
Go to the top of the page
 
+Quote Post
emerg_reanimator
сообщение May 28 2005, 09:41
Сообщение #7


Участник
*

Группа: Свой
Сообщений: 69
Регистрация: 12-10-04
Пользователь №: 853



Я не совсем правильно описал проблему.

Отладка с использованием внутрисхемного эмулятора проходит норамально (тоесть я могу смотреть состояние регистров, делать пошаговае выполнение и т.п., но после того как я ознакомился с содержанием регистров КП, ЦПУ не воспринимает прерывания хотя выполнение инструкций продолжается). Я думаю это скрое связано с самим ЦПУ нежели с отладчиком. Надо попрбывать что-нибудь подобное в другой среде.
Go to the top of the page
 
+Quote Post
iit
сообщение Jun 9 2005, 06:10
Сообщение #8


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 8-11-04
Из: Томск
Пользователь №: 1 070



Цитата(emerg_reanimator @ May 28 2005, 12:41)
Я не совсем правильно описал проблему.

Отладка с использованием внутрисхемного эмулятора проходит норамально (тоесть я могу смотреть состояние регистров, делать пошаговае выполнение и т.п., но после того как я ознакомился с содержанием регистров КП, ЦПУ не воспринимает прерывания хотя выполнение инструкций продолжается). Я думаю это скрое связано с самим ЦПУ нежели с отладчиком. Надо попрбывать что-нибудь подобное в другой среде.
*


Навряд-ли. Скорее C-SPY после режима отладки "забывает" вновь рзарешить прерывания в ячейке Embedded ICE. Для выяснения попробуйте другой отладчик.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 20:48
Рейтинг@Mail.ru


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