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

 
 
 
Reply to this topicStart new topic
> Как процессор точно определяет, что обработчик исключения завершился?
ataradov
сообщение Jan 8 2007, 15:23
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



Ведь при входе в обработчик нужно запретить все что ниже по приоритету, но при выходе нужно обратно разрешить.

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

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

Как это должно происходить. Или рекомендумемые способы выхода из ARM ARM - это единственно возможные и все остальное - это просто неопределенное поведение?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 8 2007, 16:00
Сообщение #2


Гуру
******

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



Цитата(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 другим способом, то прерывния останутся заблокироваными насегда?

Да, останутся заблокированными. Однако, менять режим в обработчике никто не запрещает, если он потом будет корректно восстановлен. Этот прием используется при организации вложенных прерываний.
Go to the top of the page
 
+Quote Post
ataradov
сообщение Jan 8 2007, 16:38
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



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


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

Поясню. Я делаю свою реализацию ARM-ядра и этот момент как-то скупо освещен в докумекнтации.

Сообщение отредактировал Taradov Alexander - Jan 8 2007, 16:38
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 8 2007, 17:21
Сообщение #4


Гуру
******

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



Цитата(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-ядра и этот момент как-то скупо освещен в докумекнтации.

Однако. А на какой платформе, если не секрет?
Go to the top of the page
 
+Quote Post
ataradov
сообщение Jan 8 2007, 17:28
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



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


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

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


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

В настоящее время есть работающее по моделированию ядро выполняющее data processing commands, load/store, branch. Все в одном режиме. вот перешел к реализации режимов и сразу возникло много вопросов. Документация у АРМа отличная и тех. поддержка на вопросы отвечает, но им не удается объяснить, что мне нужно не со стороны пользователя, а со стороны разработчика. А на этот счет документация весьма скупа.
Go to the top of the page
 
+Quote Post
ataradov
сообщение Jan 8 2007, 17:56
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



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


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

С подменой режима я вижу одну проблему. Они не взаимооднозначны с исключениями. Например режим Abort. К нему приодят Prefetch abort (приоритет 5) и Data abort (приоритет 2). Прервания с каким приоритетом разрешать, если произведена смена режима?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 8 2007, 18:17
Сообщение #7


Гуру
******

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



Цитата(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.
Go to the top of the page
 
+Quote Post
ataradov
сообщение Jan 8 2007, 18:52
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



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


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

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

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

Странно как-то реализована система прерываний в АРМе smile.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 8 2007, 19:29
Сообщение #9


Гуру
******

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



Цитата(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 приложения.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 31st May 2024 - 05:36
Рейтинг@Mail.ru


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