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

 
 
> Software Interrupts, Кто сталкивался?
Den
сообщение Oct 19 2006, 07:01
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 67
Регистрация: 28-12-04
Из: Нижний Новгород
Пользователь №: 1 714



Господа! Объясните пожалуйста что это такое, как это работает в микроконтроллерах и для чего вобще применяется в ARM.
Непосредственно меня интересует реализация в ADuC 70xx ???
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 8)
GetSmart
сообщение Oct 19 2006, 08:12
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Лучше бы спросили - кто не применял?


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
d__
сообщение Oct 19 2006, 08:14
Сообщение #3


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

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



Если брать по аналогии с платформой Х86 это аналог программного прерывания типа INT XX. В биосе пц-шки например функции дисковой подсистемы вызываются посредством выполнения программного прерывания INT 13h. В операционной системе MS-DOS большинство системных вызовов вызываются с помошью выполнения машинного кода программного прерывания INT 21H. Аналогично в Линуксе INT 80H. Очень удобный механизм. Операционка может располагаться по любым адресам. Она занимает программный вектор адресом обработчика системных вызовов и с помощью такого механизма реализует связь с программами пользователя...
Go to the top of the page
 
+Quote Post
Sarez
сообщение Oct 19 2006, 08:15
Сообщение #4


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

Группа: Новичок
Сообщений: 75
Регистрация: 17-08-06
Из: Минск
Пользователь №: 19 630



Программное прерывание позволяет тебе перейти в более привелегированный режим ( Супервизор ) и выполнить оттуда определенный участок кода обработчика. Вызавается командой SWI с определенным читсловым кодом . Происходит переход на обработчик - он анализирует числовой код , определяет какую функцию вызвать и передает ей параметры. Допустим ты можешь определить две ( и более ) функций :
int Funk1( int value) __swi(1)
{

}

и
int Funk2 ( int value1 ) __swi(2)
{

}

Обработчик анализирует код команды SWI ( в нашем случае - 1 и 2 ) , и по этому коду определяет , какая из функций вызвана и обеспечивает ей петредачу параметров. Так же ты из режима User переходишь в режим Супервизора и получаешь возможность напрямую работать с регистром CPSR - а это уже дает тебе побольше возможностей- например можешь разрешать/запрешать прерывания...
Go to the top of the page
 
+Quote Post
Den
сообщение Oct 19 2006, 08:47
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 67
Регистрация: 28-12-04
Из: Нижний Новгород
Пользователь №: 1 714



Цитата(GetSmart @ Oct 19 2006, 12:12) *
Лучше бы спросили - кто не применял?


Очень исчерпывающий и позновательный ответ!
Я не применял, но очень хочу понять и разобраться.
Go to the top of the page
 
+Quote Post
klen
сообщение Oct 19 2006, 08:51
Сообщение #6


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



В ставлю свой пятак.
1. Програмные прерывания отличаются от IRQ/FIQ тем что после выхода из обработчика исаолняется следующая за SWI команда. В IRQ/FIQ та которая была прервана.
2. Вызов как уже сказали исполняется в превелегерованном режиме.
3. По сути это форма вызова функции операционой системы (если она есть).

Если интересует как это делается в GCC, то покажу пример.
Go to the top of the page
 
+Quote Post
Den
сообщение Oct 19 2006, 08:54
Сообщение #7


Участник
*

Группа: Свой
Сообщений: 67
Регистрация: 28-12-04
Из: Нижний Новгород
Пользователь №: 1 714



Цитата(Sarez @ Oct 19 2006, 12:15) *
Программное прерывание позволяет тебе перейти в более привелегированный режим ( Супервизор ) и выполнить оттуда определенный участок кода обработчика. Вызавается командой SWI с определенным читсловым кодом . Происходит переход на обработчик - он анализирует числовой код , определяет какую функцию вызвать и передает ей параметры.


Спасибо. Уже начинает доходить, НО:
Разрешить и запретить прерывания можно ведь и без использования програмного прерывания, тогда чем оно отличается от обычной функции, т.к. вызывается по имени с номером, кроме запрета прерываний и выхода в привелегированный режим?



Цитата(klen @ Oct 19 2006, 12:51) *
В ставлю свой пятак.
1. Програмные прерывания отличаются от IRQ/FIQ тем что после выхода из обработчика исаолняется следующая за SWI команда. В IRQ/FIQ та которая была прервана.
2. Вызов как уже сказали исполняется в превелегерованном режиме.
3. По сути это форма вызова функции операционой системы (если она есть).

Если интересует как это делается в GCC, то покажу пример.


Очень интересно взглянуть! Буду очень признателен.
Go to the top of the page
 
+Quote Post
Sarez
сообщение Oct 19 2006, 09:01
Сообщение #8


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

Группа: Новичок
Сообщений: 75
Регистрация: 17-08-06
Из: Минск
Пользователь №: 19 630



"..Разрешить и запретить прерывания можно ведь и без использования програмного прерывания"
Нельзя. Пока исполняется пользовательский код - ты в режиме USER и доступа к регистру CPSR ( регистр текущего состояния программы ) ты не имеешь. Чтобы иметь такую возможность - ты должен перейти в более привелигированный режим. От обычной функции опять же отличается тем , что выполняется в режиме супервизора ( обычные функци - в режиме Юзера). Что это тебе дает - возможность выполнения критического кода ( допустим функции ОС) в привелигированном режиме. Опять же возможность изменения контекста программы...

Сообщение отредактировал Sarez - Oct 19 2006, 09:06
Go to the top of the page
 
+Quote Post
d__
сообщение Oct 19 2006, 11:12
Сообщение #9


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

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



Более правильней было бы назвать эту команду SVC (SuperVisor Call) , но к сожалению это название используется в майнфреймах IBM...
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 04:32
Рейтинг@Mail.ru


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