2013-04-30 2 views
0

Я попытался найти правильный ответ, но не смог найти его, и мне нужно знать, какие проблемы необходимо учитывать при реализации набора ISR в любой системе.В чем разница между службами прерывания ISR и обычным кодом?

Спасибо заранее!

+0

Что такое 'porober'? – leppie

+0

Извините, я имею в виду правильно * –

+0

Вы сомневаетесь в неопределенности. Вы имеете в виду ISR, которые находятся в микроконтроллерах? Или OS прерывает? Что вы пытаетесь реализовать/понять? – Hossein

ответ

0

Служба прерывания (duh!) Обслуживает «прерывание». «Прерывание» в значительной степени таково: выполнение «нормального» кода прерывается (по любому из множества причин), а управление передается в сервисную подпрограмму, которая не имеет реального отношения к/знанию ранее выполняющегося кода (даже если этот код вызвал прерывание как-то).

Помните, что прерывания могут возникать на многих «уровнях» - очень низкие уровни ISR могут обрабатывать невыполненные инструкции (например, инструкция «sqrt» в FPU, которая не поддерживает эту функцию) и имитировать эту функциональность , Они могут обрабатывать ввод-вывод устройства (полностью не связанный с исполняемым кодом), ошибки страницы, ошибки программы и т. Д.

Обычно (зависит от процессора, ОС и типа прерывания) ISR вводится с только голым минимальное «состояние процессора» сохраняется, поэтому ISR должен сначала сохранить достаточное состояние (дополнительные GPR, регистры состояния и т. д.), пока он не получит достаточно свободного для выполнения своей функции. Обычно сохранение будет в заранее выделенной области сохранения прерываний, если только прерывание не является «высоким уровнем», чтобы разрешить доступ к ISR, и в этом случае верхняя часть стека может использоваться.

Затем ISR должен выполнять свою функцию, тщательно ограничиваясь доступными ресурсами (например, используя только «закрепленное» хранилище, если оно не находится в состоянии, доступном для просмотра).

И, наконец, ISR должен восстановить прерванную среду и вернуться или, если прерывание должно быть преобразовано в исключение, создать соответствующую среду сигнализации исключения и сигнализировать об исключении.

+0

спасибо, чувак, но ваш ответ не соответствовал моему вопросу ,, цените ваше сотрудничество. –

+0

(уникальные) проблемы вращаются главным образом вокруг понимания того, что подпрограмма работает в * очень * ограниченной среде, и поэтому многие общие методы кодирования не могут быть используется - никаких исключений, без пейджинга, иногда даже без ОЗУ, просто регистрируется. Если используется язык высокого уровня, необходимо проявлять особую осторожность, чтобы он не делал то, чего он не должен делать. –

+0

спасибо! –

Смежные вопросы