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

 
 
> Время работы прерывания
d7d1cd
сообщение Sep 12 2012, 06:38
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Привет всем. Возник такой вопрос: что если обработка прерывания занимает много времени. Допустимо ли такое?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
d7d1cd
сообщение Sep 12 2012, 15:45
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Спасибо за столь подробное пояснение. Подскажите как разрешить\запретить вложенные прерывания.
Go to the top of the page
 
+Quote Post
zhevak
сообщение Sep 12 2012, 16:47
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065



Цитата(d7d1cd @ Sep 12 2012, 21:45) *
Спасибо за столь подробное пояснение. Подскажите как разрешить\запретить вложенные прерывания.

В составе ЦПУ MSP430 имеется регистр SR (другое название --R2) -- это регистр состояния процессора. Регистр состоит из множества флагов (бит), которые индицируют и управляют работой ЦПУ. Среди этих флагов есть флаг, отвечающий за глобальное разрешение прерываний. На него как бы сходятся все индивидуальные прерывания -- от портов, от таймеров, от компаратора, от АЦП и т.д. Прерывание от каждого устройства подчиняется своим индивидуальным флагам разрешения. Но все прерывания подчиняются одному глобальному флагу разрешения прерываний. В качестве некоторого аналога такой системы прерываний можно рассматривать как систему электроснабжения -- множество выключателей в комнатах и один общий рубильник. Разница только в направлении распространения воздействия: в электрической разводке энергия поступает от общего рубильника ко индивидуальным выключателям, а в системе прерываний МК -- прерывания транслируются в обратном направлении -- от периферийных устройств к глобальному флагу разрешения прерываний.

Когда этот флаг опущен (бит GIE равен "0") в системе не возникнет ни одно прерывание. Иначе говоря, если процессор выполняет какую-то программу, то она гарантированно не будет прервана, ни один обработчик прерываний не будет вызван. (Правда, в MSPЗ430 есть еще и не маскируемые прерываний, но этот случай лучше рассмотреть как-нибудь потом.)

Допустим, Вы пишите свою прогу. Прежде чем войти в бесконечный цикл (в функции main), Вы должны разрешить прерывания. Тогда Ваша прога, выполняя свою основную (фоновую) задачу, будет способна быстро реагировать на возникающие в системе события. "События" -- это различные внезапные (неожиданные) изменения чего-нибудь, например, счетчик до считал до конца или на входе порта изменился уровень сигнала. События (создают, провоцируют, генерируют) приводят к прерываниям работы основной (фоновой) программы.

Если поднят флаг GIE и разрешено индивидуальное прерывание от события (от устройства), то ход исполнения основной программы прерывается и вызывается код обработчика этого прерывания.

Непосредственно перед входом в обработчик прерывания происходит следующее (упрощено):
- в стеке сохраняется адреса программы, где произошло ее прерывание,
- в стек помещается состояние процессора (регистр SR),
- регистр SR очищается (обратите внимание -- в том числе сбрасывается и флаг глобального разрешения прерываний -- GIE. А это значит, что уже никакие другие прерывания не будут отрабатываться),
- и наконец вызывается обработчик прерывания.

При выходе из обработчика прерывания из стека восстанавливается состояние регистра состояния SR. Но сохраненное в стеке состояние регистра SR имеет поднятый флаг GIE, таким образом получается, что при выходе из прерывания автоматически снова разрешаются прерывания. Но пока исполняется код обработки прерывания другие прерывания запрещены.

Но Вы -- программист. Вы -- автор своего проекта, Вы знаете что вы делаете. И если Вам так необходимо обрабатывать вложенные прерывания, то Вы можете разрешить их -- установив снова флаг глобального разрешения прерываний GIE в своем обработчике прерываний.

Как устанавливается этот флаг -- зависит от компилятора. Например, в msp-gcc я это делаю с помощью команды __bis_SR_register(GIE), в IAR-е это можно сделать командой _EINT(). Вам лучше посмотреть в документацию компилятора, который Вы используете.

Единственное, о чем бы я хотел Вас предупредить, -- не увлекайтесь вложенными прерываниями! Если у Вас возникает такая необходимость -- значит, Вы идете не той дорогой! Это еще не ошибка, но это уже знак "Впереди опасность!"

Извините, что много написал. Рассчитывал не только на Вас. Многим школьникам и студентам, думаю, поможет правильно ориентироваться в прерываниях.


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Sep 13 2012, 00:06
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(zhevak @ Sep 12 2012, 19:47) *
Единственное, о чем бы я хотел Вас предупредить, -- не увлекайтесь вложенными прерываниями! Если у Вас возникает такая необходимость -- значит, Вы идете не той дорогой! Это еще не ошибка, но это уже знак "Впереди опасность!"

В чём опасность состоит?
Вложенные прерывания - штатное средство в том же IAR AVR (думаю и в MSP аналогично).
Создатели процессоров и компиляторов её заложили почему-то...
Отчего же не использовать?

P.S. Жить вообще опасно - все там будем.
Go to the top of the page
 
+Quote Post
zhevak
сообщение Sep 13 2012, 19:45
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065



Цитата(_Артём_ @ Sep 13 2012, 06:06) *
В чём опасность состоит?
Вложенные прерывания - штатное средство в том же IAR AVR (думаю и в MSP аналогично).
Создатели процессоров и компиляторов её заложили почему-то...
Отчего же не использовать?

P.S. Жить вообще опасно - все там будем.

Троллите?

Когда вы чините розетку, тоже подвергаете жизнь свою опасности, хотя производители розеток и заложили в них штатную возможность разбирать их. Зачем-то они это сделали? Однако, мы все тут "электрически" грамотные люди и все прекрасно понимаем, что перед тем как лезть отверткой в розетку нужно отключить на щитке электроэнергию. Еще более грамотные электрики повесят на щиток табличку "Не включать! Работают люди." и убедятся с помощью тестера, что отрубили именно эту розетку, а не в соседней комнате. Для нас это все элементарно. Поэтому, никакой опасности в починке розетки -- нет.

А теперь, уважаемый Артем, представьте пацана 3-4 лет, который до прихода мамы решил починить розетку. Сделать, так сказать маме сюрприз.

Надуманно? -- Ничуть! У моего брата пацанёнок примерно того же возраста уронил внутрь ЛАТР солдатика и полез голой рукой его оттуда доставать... У Вас есть дети?

Это вы, Артем, такой грамотный... ну, может быть, ещё я... и Вы понимаете, как работают прерывания, и для Вас всё это -- семечки! Но на форум помимо Вас приходит много "зеленого" народа. Это для них, еще знакомящихся с прерываниями, было сказано. Вы разве не поняли, что Вы съели детское питание? Про опасность я не для Вас писал.

А жить -- жить не опасно! Жить -- прикольно и просто замечательно! Жизнь -- это сумасшедший 3D мега-драйв с персональным участием в качестве главного героя! Все натурально и неповторимо. Где вы еще такое кино получите? Жизнью нужно наслаждаться и не вздрагивать по поводу смерти. Фильм все равно когда-нибудь да закончится. "Momento more" -- помни о смерти! Просто помни об этом, но не бойся её! Никто еще не жил вечно. Все рано или поздно умирали. Поэтому глупо бояться неизбежного. И также глупо передергивать смысл сказанного и троллить.


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Sep 13 2012, 20:24
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(zhevak @ Sep 13 2012, 22:45) *
Это вы, Артем, такой грамотный... ну, может быть, ещё я... и Вы понимаете, как работают прерывания, и для Вас всё это -- семечки!

Да нынче все грамотные, тем более на Форума разработчиков электроники.

Цитата(zhevak @ Sep 13 2012, 22:45) *
Троллите?

Ну ... может и так.
Так уж получилось. Звиняйте.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 07:57
Рейтинг@Mail.ru


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