Nik 0 2 ноября, 2004 Опубликовано 2 ноября, 2004 · Жалоба Поясните начинающему, как будут обрабатываться прерывания от событий 1 (более высокий приоритет) и 2 (более низкий приоритет), если: 1.во время обработки события 1 произойдет событие 2 2.во время обработки события 2 произойдет событие 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Himer 0 2 ноября, 2004 Опубликовано 2 ноября, 2004 · Жалоба Наскока помню в AVR нету приоритета прерываний, тебе самому надо разрешать прерывание 1 во время обработки события 2, и запрещать прерывание события 2(ну ето автоматом AVR во время обработки прерываний делает) во время обработки 1 - го. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 2 ноября, 2004 Опубликовано 2 ноября, 2004 · Жалоба Приоритеты прерываний у Atmel AVR означают буквально следующее: - предположим глобально прерывания запрещены; - происходят события 1 и 2 в любом порядке; - разрешаются глобально прерывания; - первым обрабатывается прерывание от события 1 (более высокий приоритет). Если глобально превания разрешены изначально и события наступают одновременно (в пределах такта), то картина та же. При переходе к процедуре обработки прерывания глобально все прерывания запрещяются (независимо от приоритета) и разрешаются при выходе из обработчика автоматически. Если их глобально разрешить инструкцией SEI (внутри обработчика), то произойдёт переход к обработчику любого (независимо от приоритета) прерывания, имеющему место (захваченному) на данный момент. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nik 0 2 ноября, 2004 Опубликовано 2 ноября, 2004 · Жалоба спасибо за разъяснения Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 14 октября, 2009 Опубликовано 14 октября, 2009 · Жалоба а может ли при разрешении вложенных прерываний из прерывания вызваться то же самое прерывание котрое в данный момент обрабатывается? Другими словами надо ли при разрешении разрешении прерываний запрещать обрабатываемое прерывание? в даташите написано, что флаг вызывающий прерывание сбрасывается аппаратно при выполнении прерывания т.е. в прерывании он видимо уже сброшен и может вновь установится вызвав то же прерывание. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mempfis_ 0 14 октября, 2009 Опубликовано 14 октября, 2009 · Жалоба а может ли при разрешении вложенных прерываний из прерывания вызваться то же самое прерывание котрое в данный момент обрабатывается? То которое обрабатывается - нет. Но если будете долго сидеть в обработчике прерывания то возможно наступит такой момент когда выполняться условия для генерации нового этого же прерывания - например ТС0 генерирует прерывание TC0OVF раз в 1мС а вы в прерывании вызываете функцию задержки на 5 мС. Тогда ждите краха системы - возникновение множества вложенных прерываний с переполнением стека :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 14 октября, 2009 Опубликовано 14 октября, 2009 · Жалоба непонятно в том то и вопрос: значит может всё-таки долго и недолго относительные понятия например если по таймеру прерывания с периодом 64 мкс на их фоне разрешаются другие прерывания сейчас прерывания от этого таймера на время обработки его прерывания запрещаю - вот думаю можно ли не запрещать (если задерживаются некоторые прерывания таймера - некритично) из Вашего ответа понял, что обработчик таймера может вызваться повторно если его индивидуально не запретить при разрешении всех прерываний Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 11 14 октября, 2009 Опубликовано 14 октября, 2009 · Жалоба сейчас прерывания от этого таймера на время обработки его прерывания запрещаю - вот думаю можно ли не запрещать (если задерживаются некоторые прерывания таймера - некритично) Если в процедуре обработки прерывания разрешены прерывания (флаг I установлен), и возможно условие повторной установки флага обрабатываемого прерывания, то запрет этого конкретного прерывания - обязателен (иначе, процедура обработки прерывания будет прервана и вызвана вновь). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 14 октября, 2009 Опубликовано 14 октября, 2009 · Жалоба спасибо. этого ответа и ждал :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 11 14 октября, 2009 Опубликовано 14 октября, 2009 · Жалоба этого ответа и ждал :rolleyes:Да, ещё забыл сказать: при таком подходе к обработке прерываний, возможен пропуск прерываний. Например, если флаг прерывания от таймера взводится каждые 10 мс, а процедура обработки прерывания может затянуться на, например, 15 мс, то может случиться, что условие взведения флага произайдет дважды (ведь не факт, что обработка прерывания начнется сразу же, как установится флаг прерывания - прерывания могут быть замаскированны при обработке других прерываний). Наверное, что-то у Вас не в порядке с организацией обработки прерываний, раз приходится так извращаться: разрешать прерывания в процедуре обработки прерывания. Наверное, лучше "перелопатить" программу... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 14 октября, 2009 Опубликовано 14 октября, 2009 · Жалоба Да это само собой разумеется - пропускаться могут. насчёт перелопатить - согласен но на арме авр себя исчерпал посудите сами мега32(кварц 14.7456) - уарт на 115200 два программных уарта 19200 и 9600 вывод звука 16 кгц интерфейс с точ мемори (эл ключи) измерение частоты аналоговых сигналов (т.е. постоянно прерывания по окончанию измерения АЦП) ДТМФ декодер программный на SPI висят dataflash и fram (постоянный обмен и параллельно считывание звука) памяти давно не осталось - приходится ужиматься - код переписывать выбрасывать ненужное а данные засовывать в fram думаю давно пора менять процессор :crying: Ваше мнение? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vvs157 0 14 октября, 2009 Опубликовано 14 октября, 2009 · Жалоба Наверное, что-то у Вас не в порядке с организацией обработки прерываний, раз приходится так извращаться: разрешать прерывания в процедуре обработки прерывания. Наверное, лучше "перелопатить" программу...В таком подходе нет ничего "некошерного". Если скажем один из ста циклов прерываний должен работать существенно дольше периода следования сигнала прерывания - то такое "длинное" прерывание будет нормально работать и без проблем прерываться на выполнение "короткого" цикла Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kool 0 14 октября, 2009 Опубликовано 14 октября, 2009 · Жалоба думаю давно пора менять процессор Ваше мнение? Дело ваше. Мегу 644 не рассматривали? Избавитесь от одного програмного уарта и получите в 2 раза больше флеш и озу на той же печатной плате. Правда, насчет цен на 644 не в курсе. Если сопоставимо по цене с арм, то мега не конкурент. 2 IgorKossak произойдёт переход к обработчику любого (независимо от приоритета) прерывания, имеющему место (захваченному) на данный момент Откуда такая информация? То есть, если возникли одновременно 3 прерывания: I1,I2,I3 (расставлены в порядке приоритета), и внутри обработчика I1 разрешить прерывания, то не факт, что I2 будет обработано до I3??? Или Вы имели ввиду то, что после sei может быть вызвано прерывание как с большим, так и с меньшим приоритетом относительно текущего? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 14 октября, 2009 Опубликовано 14 октября, 2009 · Жалоба Или Вы имели ввиду то, что после sei может быть вызвано прерывание как с большим, так и с меньшим приоритетом относительно текущего? Именно это. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vvs157 0 14 октября, 2009 Опубликовано 14 октября, 2009 · Жалоба Или Вы имели ввиду то, что после sei может быть вызвано прерывание как с большим, так и с меньшим приоритетом относительно текущего?В AVR нет системы приоритетов прерываний в обычном понимании. Есть только приоритет в отработке запросов, которые пришли в течении одного такта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться