Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Software Interrupts
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Den
Господа! Объясните пожалуйста что это такое, как это работает в микроконтроллерах и для чего вобще применяется в ARM.
Непосредственно меня интересует реализация в ADuC 70xx ???
GetSmart
Лучше бы спросили - кто не применял?
d__
Если брать по аналогии с платформой Х86 это аналог программного прерывания типа INT XX. В биосе пц-шки например функции дисковой подсистемы вызываются посредством выполнения программного прерывания INT 13h. В операционной системе MS-DOS большинство системных вызовов вызываются с помошью выполнения машинного кода программного прерывания INT 21H. Аналогично в Линуксе INT 80H. Очень удобный механизм. Операционка может располагаться по любым адресам. Она занимает программный вектор адресом обработчика системных вызовов и с помощью такого механизма реализует связь с программами пользователя...
Sarez
Программное прерывание позволяет тебе перейти в более привелегированный режим ( Супервизор ) и выполнить оттуда определенный участок кода обработчика. Вызавается командой SWI с определенным читсловым кодом . Происходит переход на обработчик - он анализирует числовой код , определяет какую функцию вызвать и передает ей параметры. Допустим ты можешь определить две ( и более ) функций :
int Funk1( int value) __swi(1)
{

}

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

}

Обработчик анализирует код команды SWI ( в нашем случае - 1 и 2 ) , и по этому коду определяет , какая из функций вызвана и обеспечивает ей петредачу параметров. Так же ты из режима User переходишь в режим Супервизора и получаешь возможность напрямую работать с регистром CPSR - а это уже дает тебе побольше возможностей- например можешь разрешать/запрешать прерывания...
Den
Цитата(GetSmart @ Oct 19 2006, 12:12) *
Лучше бы спросили - кто не применял?


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

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


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



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

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


Очень интересно взглянуть! Буду очень признателен.
Sarez
"..Разрешить и запретить прерывания можно ведь и без использования програмного прерывания"
Нельзя. Пока исполняется пользовательский код - ты в режиме USER и доступа к регистру CPSR ( регистр текущего состояния программы ) ты не имеешь. Чтобы иметь такую возможность - ты должен перейти в более привелигированный режим. От обычной функции опять же отличается тем , что выполняется в режиме супервизора ( обычные функци - в режиме Юзера). Что это тебе дает - возможность выполнения критического кода ( допустим функции ОС) в привелигированном режиме. Опять же возможность изменения контекста программы...
d__
Более правильней было бы назвать эту команду SVC (SuperVisor Call) , но к сожалению это название используется в майнфреймах IBM...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.