|
Вложенные прерываня |
|
|
|
 |
Ответов
|
Jul 8 2006, 10:38
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jul 8 2006, 15:22
|
.
     
Группа: Участник
Сообщений: 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
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jul 8 2006, 15:52
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jul 8 2006, 17:38
|
.
     
Группа: Участник
Сообщений: 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'ов, я всё прекрасно знал. И всё-таки решил сделать так. Всё написано на Си, никаких макросов.
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jul 8 2006, 18:41
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|