emerg_reanimator 0 26 мая, 2005 Опубликовано 26 мая, 2005 · Жалоба Добрый день Подскажите при каких условиях ЦПУ попдает в этот режим? Углубление в описание на архитектуру (DDI0210B ARM7TDMI Rev.4) ясности не прибавило. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
d__ 0 26 мая, 2005 Опубликовано 26 мая, 2005 · Жалоба как правило ЦПУ состоит из ядра(в данном случае это 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... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
emerg_reanimator 0 26 мая, 2005 Опубликовано 26 мая, 2005 · Жалоба Точно! Вспомнил. В описании на LPC2124 тоже указывается в каких ситуациях ЦПУ попадает в это исключения. Но вопрос возник по другому поводу. На Olimex LPC E2124 происходит ошибочное измениение указателя стэка. ... OSStartHighRdy MSR CPSR_cxsf,#0xDF ; Switch to SYS mode with IRQ and FIQ disabled BL OSTaskSwHook ; OSTaskSwHook(); ... После выполнения инструкции загрузки CPSR происходит обновление R14(SP). В стэк записывается значение адресса который указывает на несуществующую область памяти. И в итоге я попдаю в исключение по данным. Такая ситуация происходит когда ЦПУ не нагрелся до рабочей температуры :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
d__ 0 27 мая, 2005 Опубликовано 27 мая, 2005 · Жалоба Наверняка имеет место недопонимание некоторых особенностей архитектуры платформы ARM. Всегда необходимо помнить что для каждого режима работы процессора необходимо проинициализировать отдельную область стека и КАЖДЫЙ указатель стека, а они разные для каждого режима работы. Если этого не выполнить, тогда и появляются вышеописанные глюки... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
emerg_reanimator 0 27 мая, 2005 Опубликовано 27 мая, 2005 · Жалоба Именно так уважаемый d__ Не инициализировался стэк в режиме System. После добавления инициализации ситуация исчезла. Но обнаружилась другая фича. Под IAR 3.21a на Olimex LPC E2124 пытается крутится uCOS-II 2.76 + uCOS-View 1.10. Помаргивает диодами до момента пока я не открываю в отладчике C-spy окошко с регистрами контроллера прерываний (КП, VIC). После этого дейтвия, прерывания ЦПУ игнорируются (прерывания в ЦПУ разрешены, флаг готовности в регистре статуса КП установлен). Установленны два прерывания от TIMER0 и UART0. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
d__ 0 27 мая, 2005 Опубликовано 27 мая, 2005 · Жалоба Не могу сказать ничего хорошего. Скорее всего если отладчик влезает в регистры управления контроллером прерывания, то возможно нарушение нормальной работы изза того что некоторые регистры во время считывания могут изменить состояние контроллера прерывания(сдвиг приоритетов или сброс каких-либо битов состояния). Другая версия звучит примерно так, при вводе процессора в режим отладки процессор прекращает выполнение программы... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
emerg_reanimator 0 28 мая, 2005 Опубликовано 28 мая, 2005 · Жалоба Я не совсем правильно описал проблему. Отладка с использованием внутрисхемного эмулятора проходит норамально (тоесть я могу смотреть состояние регистров, делать пошаговае выполнение и т.п., но после того как я ознакомился с содержанием регистров КП, ЦПУ не воспринимает прерывания хотя выполнение инструкций продолжается). Я думаю это скрое связано с самим ЦПУ нежели с отладчиком. Надо попрбывать что-нибудь подобное в другой среде. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iit 0 9 июня, 2005 Опубликовано 9 июня, 2005 · Жалоба Я не совсем правильно описал проблему. Отладка с использованием внутрисхемного эмулятора проходит норамально (тоесть я могу смотреть состояние регистров, делать пошаговае выполнение и т.п., но после того как я ознакомился с содержанием регистров КП, ЦПУ не воспринимает прерывания хотя выполнение инструкций продолжается). Я думаю это скрое связано с самим ЦПУ нежели с отладчиком. Надо попрбывать что-нибудь подобное в другой среде. <{POST_SNAPBACK}> Навряд-ли. Скорее C-SPY после режима отладки "забывает" вновь рзарешить прерывания в ячейке Embedded ICE. Для выяснения попробуйте другой отладчик. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться