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

 
 
 
Reply to this topicStart new topic
> прерывания, как ведет себя проц, если сразу два прерывания?
Метценгерштейн
сообщение Apr 10 2015, 18:41
Сообщение #1


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



возьмем cortex, где есть приоритеты прерываний.
Допустим, у нас прерывание от таймера имеет приоритет 3. Выполняет это прерывание. Тут происходит другое прерывание с высшим приоритетом. Он бросает выполнение прерывания, начинает более приоритетное выполнять?
А если во время выполнения приоритетного еще раз возникло прерывание от таймера? Он его проигнорирует или в очередь на выполнение запишет?
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Apr 10 2015, 23:51
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(Метценгерштейн @ Apr 10 2015, 14:41) *
возьмем cortex, где есть приоритеты прерываний.
Допустим, у нас прерывание от таймера имеет приоритет 3. Выполняет это прерывание. Тут происходит другое прерывание с высшим приоритетом. Он бросает выполнение прерывания, начинает более приоритетное выполнять?

Угу.
Цитата(Метценгерштейн @ Apr 10 2015, 14:41) *
А если во время выполнения приоритетного еще раз возникло прерывание от таймера? Он его проигнорирует или в очередь на выполнение запишет?

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


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
megajohn
сообщение Apr 11 2015, 03:39
Сообщение #3


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

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(A. Fig Lee @ Apr 11 2015, 02:51) *
Угу.

то есть PC,R1-R12 сохраняются в MSP ?


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
SII
сообщение Apr 11 2015, 03:57
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 13-07-10
Из: Солнечногорск-7
Пользователь №: 58 414



Аппаратно сохраняются лишь R0-R3, R12, LR, PC и PSR; остальные регистры, если надо, должен сохранять сам программист (ну или компилятор, если обработчик прерывания пишется на языке высокого уровня). И не обязательно в главном стеке -- сохраняются они в стеке, который был активен на момент прерывания (а это может быть и стек процесса -- это уж как программа написана). Более-менее полная "выжимка" из документации по поводу обработки прерываний имеется здесь. Конечно, всё это расписано в документации, но там разбросано по многим страницам, да ещё часто представлено в виде псевдокода; как по мне, текстовое описание того, что делается, удобней, чем делающий это код.

Более приортитетное прерывание прерывает текущий обработчик, если последний не успел поднять свой приоритет (например, вообще запретить прерывания); в таком случае в стеке сохраняются регистры прерванного обработчика. В итоге в стеке (или двух стеках -- первый раз в стеке процесса, дальше -- в главном стеке) регистры могут сохраняться многократно, поэтому надо следить, чтобы его размеры были достаточны.
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Apr 11 2015, 04:17
Сообщение #5


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



т.е. если выполняется прерывание, возникает более приоритетное, во время его выполнения в стеке сохраняются регистры предыдущего прерывания, возникает еще раз первое прерывание- что произойдет?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 11 2015, 04:31
Сообщение #6


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Метценгерштейн @ Apr 11 2015, 07:17) *
т.е. если выполняется прерывание, возникает более приоритетное, во время его выполнения в стеке сохраняются регистры предыдущего прерывания, возникает еще раз первое прерывание- что произойдет?

Взведется pending бит. После окончания обработки низкоприоритетного прерывания оно начнет обрабатываться еще раз.
Go to the top of the page
 
+Quote Post
SII
сообщение Apr 11 2015, 04:46
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 13-07-10
Из: Солнечногорск-7
Пользователь №: 58 414



Ну, это уже зависит от логики обработчика прерывания. Новое прерывание может вытеснить уже выполняющийся обработчик лишь в том случае, если приоритет нового выше приоритета обрабатывающегося (точней, приоритет группы -- см. по ссылке, что выше давал, если интересно группирование приоритетов). Соответственно, новое прерывание от источника, обработка предыдущего прерывания для которого ещё не завершилась, не сможет вытеснить уже вызванный обработчик этого прервания. Ну а этот обработчик может в конце сбросить все условия прерывания от данного источника -- тогда новое прерывание не произойдёт вовсе. Но, если ничего такого не делать, то после завершения обработчика он сразу будет вызван повторно для обработки нового запроса, как сказал ViKo.
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Apr 11 2015, 14:54
Сообщение #8


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



усложним задачу- одно прерыв. выполняется, более приоритетное вызвалось. Пока оно выполнялось, еще раз первое вызвалось и т.д. Т.е. реально прерывания больше копятся, чем успевают выполняться. Как -то получится, что стек наползет на область RAM?
Go to the top of the page
 
+Quote Post
adnega
сообщение Apr 11 2015, 15:04
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Метценгерштейн @ Apr 11 2015, 17:54) *
усложним задачу- одно прерыв. выполняется, более приоритетное вызвалось. Пока оно выполнялось, еще раз первое вызвалось и т.д. Т.е. реально прерывания больше копятся, чем успевают выполняться. Как -то получится, что стек наползет на область RAM?

Вы не понимаете как работают прерывания в Cortex-M. Тема хорошо описана у Дж. Ю. Есть на русском. Советую.
Вкратце: есть разница между запросом прерывания и вызовом обработчика - для вас, похоже, это одно и то же.
Go to the top of the page
 
+Quote Post

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

 


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


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