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

 
 
> Вложенные прерываня
moonrock
сообщение Jul 7 2006, 20:39
Сообщение #1


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

Группа: Свой
Сообщений: 166
Регистрация: 24-03-05
Из: Санкт-Петербург
Пользователь №: 3 661



Всем привет, недавно начал разбираться с LPC2132, среда - Keil uVision,
и вот встал вопрос, как сделать, чтобы прерывания с высшим приоритетом могли прерывать исполнение обработчиков прерываний с низшим приоритетом?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zltigo
сообщение Jul 8 2006, 10:38
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(moonrock @ Jul 8 2006, 12:23) *
ARM 7 аппаратно НЕ поддерживает вложенные прерывания

Осталось выяснить КТО аппаратно подерживает сохранение контекстов для КАЖДОГО из
возможных прерываний :-)). На самом деле достоинством является вообще наличие аппаратно переключаемого стека и собственных регистров FIQ и IRQ. Таким образом "софтовая" организация
вложенных прерываний является абсолютно естественной а не каким-то "извращением" являющимся дурной особенностью ARM7.

Цитата(yuri_t @ Jul 8 2006, 13:17) *
IMHO,без крайней необходимости с nested interrupt в ARM7/9 лучше не связываться -
весьма коварная штука.

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 8 2006, 15:22
Сообщение #3


.
******

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



Цитата(zltigo @ Jul 8 2006, 16:38) *
Не коварнее организации вложенных прерываний на любом другом процессоре, но проектировать систему со вложенными прерываниями действительно нужно только в случае крайней необходимости.

Ага. Скажите прямо, проектировать систему в которой будут сидеть на прерываниях более одного периферийного устройства крайне опасно. Бог его знает, что может произойти. И если в моей программе вдруг потребовалось одновременно обрабатывать все 8 capture-входов, PWM, два UARTа, RTC и пару вшешних прерываний, то это ну очень крайняя необходимость, которая у других никогда не возникает. Причём всё бы ничего, если бы capture не требовали максимально быстрого отклика. А так пришлось все прерывания кроме них сделать вложенными. Гордится этим? Слишком мелко как-то. Я бы гордился скажем 20-ю вложенными прерываниями. Если у вас ничего интересного нет по поводу смешивания вложенных и невложенных прерываний и как с помощью их комбинаций можно оптипизировать систему в целом, то можете говорить и дальше что это плохо и неразумно. Многие с удовольствием послушают.

Сообщение отредактировал GetSmart - Jul 8 2006, 15:26


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 8 2006, 15:52
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(GetSmart @ Jul 8 2006, 18:22) *
И если в моей программе вдруг потребовалось одновременно обрабатывать все 8 capture-входов, PWM, два UARTа, RTC и пару вшешних прерываний, то это ну очень крайняя необходимость, которая у других никогда не возникает. Причём всё бы ничего, если бы capture не требовали максимально быстрого отклика. А так пришлось все прерывания кроме них сделать вложенными.

Ну и где в описанной системе 8 "УРОВНЕЙ ВЛОЖЕННОСТИ" помянутые в ПЕРВОНАЧАЛЬНОМ посте???
В этом черным по белому описан вариант одного уровня, причем его наличие обосновано, хотя и не понятно, почему-бы не использовать для CAP FIQ, если конечно у Вас не дебильноватый контроллер типа STR7..... В принципе именно армовские IRQ+FIQ без дополнительной организации вложенности достаточно хорошо закрывают массу вариантов применения, в том числе и описанный Вами.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 8 2006, 17:38
Сообщение #5


.
******

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



Цитата(zltigo @ Jul 8 2006, 21:52) *
Ну и где в описанной системе 8 "УРОВНЕЙ ВЛОЖЕННОСТИ" помянутые в ПЕРВОНАЧАЛЬНОМ посте???

Собственно 8 уровней мне не надо было. Они возникают сами по себе при объявлении любого прерывания __nested. Поэтому если в системе 8 прерываний, 2 простых, 6 __nested, то если никак дополнительно не извращаться, будут именно 7 уровней вложенности. А теперь почему они сделаны __nested. Например, после приёма байта по UARTпрямо в прерывании вызывается драйвер связи, который может долго не возвращать управление, ну скажем до 100 мкс. Всё это время он не мешает никаким прерываниям с более высоким приоритетом. А в некоторых случаях (приём полного пакета) он ещё и взводит софтовое прерывание с более низким приоритетом. Так, что как только это прерывание завершится и если ничего более важного не произойдёт, управление вернётся не в основную прогу, а в софтовое прерывание связи. В нём вообще может управление застрять на десятки миллисекунд. И никто не обломается! Никаких критических секций и прочих извращений для этого применять не нужно вообще. Всё продумано и очень просто в применении. Бояться вложенных прерываний - в лес не ходить.

Насчёт FIQ'ов, я всё прекрасно знал. И всё-таки решил сделать так. Всё написано на Си, никаких макросов.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 8 2006, 18:41
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(GetSmart @ Jul 8 2006, 20:38) *
Они возникают сами по себе при объявлении любого прерывания __nested.

Когда что-то "возникает само по себе" это не радует :-(. А реально никто не мешает для описанного Вами случая в __nested запретить прерывание одного __nested другим ввиду ПОЛНОЙ НЕНУЖНОСТИ сего действия. И я не назвал-бы это "извращением" - напротив. Если-бы в ARMообразных контроллерах могли назначаться одинаковые приоритеты для разных источников, то это вообще реализовывалось без каких-либо дополнительных телодвижений.
Цитата
А теперь почему они сделаны __nested.

Это не нуждается в дополнительных объяснениях - "надо быстро реагировать на CAP" было вполне достаточно.
Цитата
Бояться вложенных прерываний - в лес не ходить.

Я не призываю их бояться я сам их использую, просто их не надо использовать без необходимости и уж точно бороться с возникающими "сами по себе" побочными эффектами в виде вложенности в местах, где это без надобности. Ибо, как минимум, ведет к дополнительным затратам временных ресурсов и памяти. При этом можно получить неожиданные проблемы (особенно при дописывании через годик-другой) при работе обработчиков с общими ресурсами. При совсем уже чрезмерном увлечении длинными вложенными обработчиками можно и повторный вызов обработчика схлопотать, от которого тоже надо защиту вписывать. В общем оно это надо без крайней необходимости?
Цитата
Насчёт FIQ'ов, я всё прекрасно знал. И всё-таки решил сделать так.

Т.е. для конкретного описанного случая запутаннее и тормознее :-( без явной на то необходимости, а только по причине наличия в EWARM
удобного ключевого слова __nested :-(.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- moonrock   Вложенные прерываня   Jul 7 2006, 20:39
- - DASM   Цитата(moonrock @ Jul 8 2006, 00:39) Всем...   Jul 7 2006, 22:04
|- - Andrew2000   Цитата(DASM @ Jul 8 2006, 02:04) А никак....   Jul 7 2006, 22:40
- - moonrock   как я понимаю, такое ограничение накладывает контр...   Jul 7 2006, 22:44
- - GetSmart   Извращенцы вы тут все. Говорят о том, что не знают...   Jul 7 2006, 23:07
- - aaarrr   Читать лучше не абстрактные хелпы, а обратиться к ...   Jul 7 2006, 23:41
- - DASM   да... был неправ. Всем спасибо, век живи - век учи...   Jul 8 2006, 05:01
- - moonrock   Всем большое спасибо, а вот тот ответ, который я х...   Jul 8 2006, 09:23
|- - aaarrr   Цитата(moonrock @ Jul 8 2006, 13:23) ...н...   Jul 8 2006, 11:22
- - yuri_t   IMHO,без крайней необходимости с nested interrupt...   Jul 8 2006, 10:17
- - GetSmart   Те же, кто не хочет использовать много асма, могут...   Jul 8 2006, 12:14
|- - zltigo   Цитата(GetSmart @ Jul 8 2006, 15:14) У ме...   Jul 8 2006, 12:49
|- - Andrew2000   А на мой вопрос про завменитель CLZ кто-нить может...   Jul 8 2006, 13:00
|- - zltigo   Цитата(Andrew2000 @ Jul 8 2006, 16:00) А ...   Jul 8 2006, 13:08
- - aaarrr   Цитата(GetSmart @ Jul 8 2006, 16:14) Те ж...   Jul 8 2006, 13:06
|- - Andrew2000   Цитата(aaarrr @ Jul 8 2006, 17:06) Могли ...   Jul 8 2006, 13:48
|- - zltigo   Цитата(Andrew2000 @ Jul 8 2006, 16:48) Пр...   Jul 8 2006, 14:00
- - aaarrr   Цитата(Andrew2000 @ Jul 8 2006, 17:48) На...   Jul 8 2006, 14:12
|- - Andrew2000   Цитата(aaarrr @ Jul 8 2006, 18:12) Цитата...   Jul 10 2006, 15:53
- - DASM   А вот и не подеретесь Zltigo - а чего в ентих...   Jul 8 2006, 16:42
|- - zltigo   Цитата(DASM @ Jul 8 2006, 19:42) Zltigo -...   Jul 8 2006, 17:17
- - DASM   Да уж... Мне как-то повезло... Ни разу FIQ не надо...   Jul 8 2006, 17:38
- - GetSmart   Цитатаможно и повторный вызов обработчика схлопота...   Jul 8 2006, 19:32
|- - KeiserSose   Цитата(GetSmart @ Jul 8 2006, 22:32) Повт...   Jun 19 2009, 07:30
|- - aaarrr   Цитата(KeiserSose @ Jun 19 2009, 11:30) П...   Jun 19 2009, 07:36
|- - KeiserSose   Цитата(aaarrr @ Jun 19 2009, 10:36) Ошиба...   Jun 19 2009, 09:11
|- - aaarrr   Цитата(KeiserSose @ Jun 19 2009, 13:11) Е...   Jun 19 2009, 10:07
|- - KeiserSose   Убедил. Был неправ. Вспылил.   Jun 19 2009, 19:41
- - moonrock   блин, тут все такие умные, один умней другого, аж ...   Jul 8 2006, 19:37
|- - zltigo   Цитата(moonrock @ Jul 8 2006, 22:37) мой ...   Jul 8 2006, 20:02
|- - Nixon   Цитата(moonrock @ Jul 8 2006, 22:37) блин...   Jul 10 2006, 16:08
|- - Сергей Борщ   Цитата(Nixon @ Jul 10 2006, 19:08) В каче...   Jul 10 2006, 16:25
- - GetSmart   Я старым (уже) IAR 4.20 Тут где-то выкладывали ссы...   Jul 8 2006, 20:02
- - aaarrr   Цитата(Сергей Борщ @ Jul 10 2006, 20:25) ...   Jul 10 2006, 16:34
|- - zltigo   Цитата(aaarrr @ Jul 10 2006, 19:34) До за...   Jul 10 2006, 17:06
- - aaarrr   Цитата(zltigo @ Jul 10 2006, 21:06) Прове...   Jul 10 2006, 17:12
|- - zltigo   Цитата(aaarrr @ Jul 10 2006, 20:12) КодRe...   Jul 10 2006, 17:25
|- - Angle   Подскажите, если кто знает, пример кода для обрабо...   Oct 1 2007, 10:55
|- - xelax   Цитата(Angle @ Oct 1 2007, 14:55) Подскаж...   Oct 2 2007, 05:52
- - Tannen   Мои пять копеек вопроса про вложенные прерывания....   Jun 18 2009, 13:17
|- - Сергей Борщ   Цитата(Tannen @ Jun 18 2009, 16:17) Код ...   Jun 18 2009, 14:01
- - Step_ARM   Половину не понял из того, что написано... Хотя во...   Jun 23 2009, 05:43
- - meister   Цитата(Step_ARM @ Jun 23 2009, 09:43) Кор...   Jun 23 2009, 06:41
- - Step_ARM   Цитата(meister @ Jun 23 2009, 10:41) Когд...   Jun 23 2009, 08:12


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 14:22
Рейтинг@Mail.ru


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