|
|
  |
Нужны ли вложенные прерывания? |
|
|
|
Aug 7 2009, 17:03
|

Участник

Группа: Участник
Сообщений: 61
Регистрация: 5-10-05
Из: Зеленоград
Пользователь №: 9 268

|
Цитата(singlskv @ Aug 2 2009, 03:56)  Ерунду Вы пишете полную... Если Вашему процу делать нечего настолько что Вы готовы сидеть в цикле и опрашивать - Вы выбрали не тот проц... I2C это самый типичный пример для interrupt driven transfer... Я 100% знал, что кто-нибудь придерётся и написал - "без явной необходимости". Цитата(Altemir @ Aug 3 2009, 15:00)  синхронизация времени должна была проходить ВНУТРИ прерывания, чтобы ни одна из процедур основного кода не получила расходящиеся значения времени. А теперь вопрос - чем ещё заниматься в прерывании кроме как ждать битов статуса, если вот так вот задача поставлена, а? Повторяю - для остальной периферии возможно потребуются вложенные прерывания. singlskv, читайте внимательнее. Мы тут знаниями делимся, а не соревнуемся кто умнее. Не нравится совет - придумайте более дельный.
Сообщение отредактировал IgorMarx - Aug 7 2009, 17:12
|
|
|
|
|
Aug 7 2009, 19:19
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(singlskv @ Aug 2 2009, 02:56)  Ерунду Вы пишете полную... Если Вашему процу делать нечего настолько что Вы готовы сидеть в цикле и опрашивать - Вы выбрали не тот проц... I2C это самый типичный пример для interrupt driven transfer... Ерунду Вы пишете полную. Если Вам делать нечего настолько, что Вы готовы примитивный процесс обращения по I2C заталкивать в прерывания - Вы выбрали ..хм... не тот род занятий. I2C это самый типичный пример для включения в основной цикл. Ну не стоит обобщать, в самом то деле. В среднестатистическом устройстве (среди моих - 100%) обращение по I2C (запись в EEPROM) связана с определенными действиями по интерфейсу пользователя, сменой состояний основного процесса, а все, что нужно для функционирования прибора, запихано в свои прерывания, вовсе необязательно вложенные. Кстати, по вложенности прерывания несколько недель назад было обсуждение в группе LPC2000 на YAhoo.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Aug 7 2009, 20:22
|

Участник

Группа: Участник
Сообщений: 61
Регистрация: 5-10-05
Из: Зеленоград
Пользователь №: 9 268

|
А кто против прерываний? Да ради бога. Всё от задачи зависит. Просто приведу вам пример из свой практики, когда это не нужно. И процу действительно нечем заняться. Flashloader. Надеюсь, там знакомая. Я написал flashloader. В RAM загружается код, который шьёт flash и плюс EEPROM по шине 2IC. Попробуйте теперь меня убедить, зачем мне это делать не в цикле и что я не тот камень выбрал. Я это не придумал, это реальный код, и вы бы поступили так же (почитали доку framework, где прерывания, мягко говоря, не предусмотрены) - сделали цикл. Если у кого-то не встречалась ситуация, когда этого делать не нужно, - может, просто опыта недостаточно? Кстати, вложенность прерываний я и сам использую. Приведу ещё пример. EEPROM - съёмная энергонезависимая память в устройстве. Предположим, инициализация этого устройства при включении питания зависит от содержимого этой памяти. Например, бутлоадер девайса проверяет что воткнули и не нужно ли скопировать новую прошивку во внутреннюю флешь. Если версия новее - копируем, иначе стартуем исполняемый код, обработчик прерываний которого понятия не имеет ни про какие I2C EEPROM. Каким боком тут прерывания? Ещё пример - сохранение контекста работы устройства (по немаскируемому прерыванию!) и восстановление при включении питания. И много чего ещё. Цитата(Dog Pawlowa @ Aug 7 2009, 23:19)  В среднестатистическом устройстве (среди моих - 100%) обращение по I2C (запись в EEPROM) связана с определенными действиями по интерфейсу пользователя, сменой состояний основного процесса, а все, что нужно для функционирования прибора, запихано в свои прерывания, вовсе необязательно вложенные. Это точно. Вот бьюсь сейчас - GSM модем делает задержки более секунды при обращениях, а опрашивать MDB шину и поддерживать протокол нужно с периодом этак 0.1 сек... Не то мне дополнительный поток делать с диспетчеризацией, не то обрабатывать весь протокол MDB в прерываниях
Сообщение отредактировал IgorMarx - Aug 7 2009, 20:04
|
|
|
|
|
Aug 7 2009, 23:15
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(IgorMarx @ Aug 7 2009, 21:03)  А теперь вопрос - чем ещё заниматься в прерывании кроме как ждать битов статуса, если вот так вот задача поставлена, а? Вы вобще в курсе что I2C полностью статическая шина ? Если что будем сидеть в прерывании до конца ? Поллинг в прерывании это вобще новое слово в программировании... то есть конечно допустим для некоторых интерфейсов(например SPI в режиме мастера), но для I2C это просто бред... И не удивительно что при таком подходе "вдруг" становятся нужными вложенные прерывания... Цитата Повторяю - для остальной периферии возможно потребуются вложенные прерывания.  Цитата(Dog Pawlowa @ Aug 7 2009, 23:19)  Вы выбрали ..хм... не тот род занятий. Спасибо конечно за помощь в выборе рода занятий, но вот согласитесь ли Вы со мной поспорить на конкретном примере(то есть поспорить на конкретной реализации) ? Цитата I2C это самый типичный пример для включения в основной цикл. Задачки разные бывают... Сможете гарантировать передачу 6-8 байт за 1мс при скорости i2c ~100кбит и обслуживании обмена в основном цикле ?(обмен между 2 процами) При том что основной цикл считает плавучку с неадекватными временами реакции... Цитата(IgorMarx @ Aug 8 2009, 00:22)  А кто против прерываний? Да ради бога. Всё от задачи зависит. Просто приведу вам пример из свой практики, когда это не нужно. И процу действительно нечем заняться. Flashloader. Надеюсь, там знакомая. Я написал flashloader. В RAM загружается код, который шьёт flash и плюс EEPROM по шине 2IC. Попробуйте теперь меня убедить, зачем мне это делать не в цикле и что я не тот камень выбрал.
Я это не придумал, это реальный код, и вы бы поступили так же (почитали доку framework, где прерывания, мягко говоря, не предусмотрены) - сделали цикл. Если у кого-то не встречалась ситуация, когда этого делать не нужно, - может, просто опыта недостаточно? Это все очень "своевременные" замечания, но топик таки называется "Вложенные прерывания" ....
|
|
|
|
|
Aug 8 2009, 04:38
|

Участник

Группа: Участник
Сообщений: 61
Регистрация: 5-10-05
Из: Зеленоград
Пользователь №: 9 268

|
Цитата(singlskv @ Aug 8 2009, 03:15)  но вот согласитесь ли Вы со мной поспорить на конкретном примере(то есть поспорить на конкретной реализации) ? ... Это все очень "своевременные" замечания, но топик таки называется "Вложенные прерывания" .... На конкретном примере - я его привёл. А насчёт темы топика Вы правы. За сим и откланиваюсь, ибо аргументы Ваши слабы, да и спорить в общем-то не о чем. Извините, спойлер не сработал (?), получилась длинная колбаса. Все исходники пришлось вытереть из этого сообщения.
Сообщение отредактировал IgorMarx - Aug 8 2009, 04:42
|
|
|
|
|
Aug 8 2009, 05:45
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(singlskv @ Aug 8 2009, 02:15)  Спасибо конечно за помощь в выборе рода занятий, но вот согласитесь ли Вы со мной поспорить на конкретном примере(то есть поспорить на конкретной реализации) ? Задачки разные бывают... Сможете гарантировать ... Не за что. Ну вот мы и пришли - Ваши задачи против моих задач. И что? Позовем третьего с другими задачами? Просто не обобщайте, и будет консенсус. По крайней мере я соглашусь  А возвращаясь с теме вложенности. Поразительно, 20-15 лет назад на 8080/8086 вложенность и приоритетность прерываний были естественным свойством системы. Убогость контроллеров, к счастью, уходящих сейчас, сделали это чем-то необычным.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Aug 8 2009, 06:12
|

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

|
Цитата(Dog Pawlowa @ Aug 8 2009, 08:45)  Поразительно, 20-15 лет назад на 8080/8086 вложенность и приоритетность прерываний были естественным свойством системы. Убогость контроллеров, к счастью, уходящих сейчас, сделали это чем-то необычным. Не так - убогость средств программирования, убогость операционных систем, и в первую очередь убогость программистов делало 20 лет назад вложенность "полезной". Хрен в под тем-же DOS организуешь "многозадачность" и выживешь при дисковых операциях без вложенных прерываний. Лично пользовал в прошлом широко. Однако при сколь-нибудь нормальном подходе к делу, вложенность, как минммум, бесполелезна в абсолютно подавляющем числе случаев. Причины "возрождения" поддержки вложенности на данном этапе развития контроллеростроения очень простые - пусть будет до кучи - ресурсы есть. А уровень программирования, опять, зачастую на уровне плинтуса. Массовость, однако.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Aug 8 2009, 20:12
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(zltigo @ Aug 8 2009, 09:12)  Не так - убогость средств программирования, убогость операционных систем, и в первую очередь убогость программистов делало 20 лет назад вложенность "полезной"... А я согласен с Dog Pawlowa, - не надо обобщать. И не надо переносить свойства контроллеров общего назначения на МК для встроенных приложений. И для I2C тоже самое. Представим, что у нас поступает какая-то инфа по I2C и от этого крутится голова. Ну и какая разница, буду ли я ждать пока "буфер приёма не пуст" или я буду прямо сидеть на приёме? Если это попутный фоновый процесс, то тогда реализация "по прерываниям" - предпочтительней.
|
|
|
|
|
Aug 9 2009, 00:21
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(SasaVitebsk @ Aug 9 2009, 00:12)  А я согласен с Dog Pawlowa, - не надо обобщать. И не надо переносить свойства контроллеров общего назначения на МК для встроенных приложений. И для I2C тоже самое. Представим, что у нас поступает какая-то инфа по I2C и от этого крутится голова. Ну и какая разница, буду ли я ждать пока "буфер приёма не пуст" или я буду прямо сидеть на приёме? Если это попутный фоновый процесс, то тогда реализация "по прерываниям" - предпочтительней. Я совсем не против работы по i2c без прерываний, более того, в моих проектах часто бывает что один проц(главный) работает с i2c по прерываниям(по другому никак из-за большого числа разных задач), а другой(переферийный) проц работает по опросу(опять же по другому никак из-за необходимости иметь только 1 прерывание в системме для предсказуемого джиттера). Я против попыток ожидания флагов i2c в прерываниях....(и вложенных прерываниях как костыль...) как предлагал один из авторов...
|
|
|
|
|
Aug 9 2009, 05:17
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(zltigo @ Aug 8 2009, 09:12)  Однако при сколь-нибудь нормальном подходе к делу, вложенность, как минммум, бесполелезна в абсолютно подавляющем числе случаев. Возможно. Из проектов последних пяти лет она мне понадобилась для реализации программного IrDA SIR. Теоретически ее можно рассматривать как некоторую альтернативу RTOS.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Aug 10 2009, 04:02
|
Частый гость
 
Группа: Участник
Сообщений: 132
Регистрация: 11-07-08
Пользователь №: 38 870

|
Цитата(zltigo @ Aug 8 2009, 10:12)  А уровень программирования, опять, зачастую на уровне плинтуса. Массовость, однако. Весь этот вопрос о вложенных прерываниях яйца выеденного не стоит. :-) Тем более , что человек уже как-то решил свою тайную проблему. Кто как хочет, тот так и двигает левой рукой(вариант -- правой)? Но Ваша фраза об уровне меня заинтересовала. Как можно оценить уровень программирования? Массовость??? Откуда она взялась???? У нас так много ВУЗов, которые готовят специалистов по программированию (в частности МК)???? Большинство из тех , кто здесь бывает и не бывает сами осваивали эту область.
|
|
|
|
|
Aug 10 2009, 04:10
|

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

|
Цитата(Step_ARM @ Aug 10 2009, 07:02)  Кто как хочет, тот так и двигает левой рукой(вариант -- правой)? Понятно. Подход "радиогубителя" - слепил что-то и "у меня работает". Цитата Но Ваша фраза об уровне меня заинтересовала. Как можно оценить уровень программирования? Спросить оценки у других.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Aug 10 2009, 05:04
|
Частый гость
 
Группа: Участник
Сообщений: 132
Регистрация: 11-07-08
Пользователь №: 38 870

|
Цитата(zltigo @ Aug 10 2009, 08:10)  Понятно. Подход "радиогубителя" - слепил что-то и "у меня работает".
Спросить оценки у других. Хлоп, штампик поставил... Точно старый усталый программер. Как всегда -- я Д"Артаньян , а Вы все ... Я-то хотел той фразой сказать ,что путей решения очень много. А если я хочу оценить кого-то при приеме на работу? Я не настолько велик, чтобы кому-то давать оценку, а таких "гигантов " как Вы рядом нет. Как быть? Критерии все же нужны...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|