Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как процессор точно определяет, что обработчик исключения завершился?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
ataradov
Ведь при входе в обработчик нужно запретить все что ниже по приоритету, но при выходе нужно обратно разрешить.

Если я правильно понял инструкция по записи LR_mode в PC с любым смещением будет знаком выхода.

То-есть если просто в обработчике изменить режим на USR или записать значение LR в PC другим способом, то прерывния останутся заблокироваными насегда?

Как это должно происходить. Или рекомендумемые способы выхода из ARM ARM - это единственно возможные и все остальное - это просто неопределенное поведение?
aaarrr
Цитата(Taradov Alexander @ Jan 8 2007, 15:23) *
Если я правильно понял инструкция по записи LR_mode в PC с любым смещением будет знаком выхода.

Это не совсем так - выйти из исключения и восстановить CPSR можно двумя способами:
1. Загрузить PC при помощи data-processing команды с установленным битом S (пример: SUBS PC, LR, #0x04).
2. Загрузить PC при помощи LDM with Restore (пример: LDMFD SP!, {..., PC}^).

Цитата(Taradov Alexander @ Jan 8 2007, 15:23) *
То-есть если просто в обработчике изменить режим на USR или записать значение LR в PC другим способом, то прерывния останутся заблокироваными насегда?

Да, останутся заблокированными. Однако, менять режим в обработчике никто не запрещает, если он потом будет корректно восстановлен. Этот прием используется при организации вложенных прерываний.
ataradov
Цитата
Да, останутся заблокированными. Однако, менять режим в обработчике никто не запрещает, если он потом будет корректно восстановлен. Этот прием используется при организации вложенных прерываний.


Так. А можно попродробнее? Ведь приоритеты имеют не режимы (корорые как я понял нужны просто чтобы разделить LR и SP), а конкретные исключительные ситуации. Разьве если процессор находится в режиме обработки FIQ можно разрешить другие прерывания просто поменяв режим?
А где в документации это описано, если не сложно.

Поясню. Я делаю свою реализацию ARM-ядра и этот момент как-то скупо освещен в докумекнтации.
aaarrr
Цитата(Taradov Alexander @ Jan 8 2007, 16:38) *
Разьве если процессор находится в режиме обработки FIQ можно разрешить другие прерывания просто поменяв режим?

Конечно, только тогда теряется смысл использовать FIQ. Режим процессора в CPSR можно изменить из любого привилегированного режима.

Цитата(Taradov Alexander @ Jan 8 2007, 16:38) *
А где в документации это описано, если не сложно.

Про манипуляции с режимами можно почитать в PrimeCell Vectored Interrupt Controller (PL190) r1p2 Technical Reference Manual

Цитата(Taradov Alexander @ Jan 8 2007, 16:38) *
Поясню. Я делаю свою реализацию ARM-ядра и этот момент как-то скупо освещен в докумекнтации.

Однако. А на какой платформе, если не секрет?
ataradov
Цитата
Про манипуляции с режимами можно почитать в PrimeCell Vectored Interrupt Controller (PL190) r1p2 Technical Reference Manual


Спасибо. Посмотрю.

Цитата
Однако. А на какой платформе, если не секрет?


Это чисто хобби smile.gif На текущий момент расчитываю влезть в ПЛИС Sparatan 3E (С ней есть отличная отладочная плата).

В настоящее время есть работающее по моделированию ядро выполняющее data processing commands, load/store, branch. Все в одном режиме. вот перешел к реализации режимов и сразу возникло много вопросов. Документация у АРМа отличная и тех. поддержка на вопросы отвечает, но им не удается объяснить, что мне нужно не со стороны пользователя, а со стороны разработчика. А на этот счет документация весьма скупа.
ataradov
Цитата
Про манипуляции с режимами можно почитать в PrimeCell Vectored Interrupt Controller (PL190) r1p2 Technical Reference Manual


Но ведь для работы этого VIC не требуется подменять режим. Достотчно просто убрать биты I/F в CPSR.

С подменой режима я вижу одну проблему. Они не взаимооднозначны с исключениями. Например режим Abort. К нему приодят Prefetch abort (приоритет 5) и Data abort (приоритет 2). Прервания с каким приоритетом разрешать, если произведена смена режима?
aaarrr
Цитата(Taradov Alexander @ Jan 8 2007, 17:56) *
Но ведь для работы этого VIC не требуется подменять режим. Достотчно просто убрать биты I/F в CPSR.

Нет, не достаточно - в противном случае будут испорчены SPSR_irq и LR_irq.

Цитата(Taradov Alexander @ Jan 8 2007, 17:56) *
С подменой режима я вижу одну проблему. Они не взаимооднозначны с исключениями. Например режим Abort. К нему приодят Prefetch abort (приоритет 5) и Data abort (приоритет 2). Прервания с каким приоритетом разрешать, если произведена смена режима?

Говорить о приоритетах можно только в одном случае - когда два или большее число исключений происходят одновременно.
Разрешение прерываний определяют только биты CPSR.
ataradov
Цитата
Говорить о приоритетах можно только в одном случае - когда два или большее число исключений происходят одновременно.
Разрешение прерываний определяют только биты CPSR.


Здорово. Я почему-то об этом не подумал.

То есть если во время выполения (не одновременно с) FIQ придет prefetch abort (у него приоритет ниже), то выполение FIQ прервется?

Странно, как тогда защититься от множественных вызовов одного и того-же перывния?
То есть что делать в ситуации PrefetchAbort, в момент его исполнения пришел FIQ и опять Prefetch Abort.

Странно как-то реализована система прерываний в АРМе smile.gif
aaarrr
Цитата(Taradov Alexander @ Jan 8 2007, 18:52) *
То есть если во время выполения (не одновременно с) FIQ придет prefetch abort (у него приоритет ниже), то выполение FIQ прервется?

Да, прервется.

Цитата(Taradov Alexander @ Jan 8 2007, 18:52) *
Странно, как тогда защититься от множественных вызовов одного и того-же перывния?
То есть что делать в ситуации PrefetchAbort, в момент его исполнения пришел FIQ и опять Prefetch Abort.

Никак. Просто следует помнить, что в привилегированных режимах (в т.ч. Abort) по-идее должна работать операционная система, а генерация ошибок - удел user-space приложения.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.