...Так как в МК существует много прерываний, у меня возник вопрос: Если во время обработки одного прерывания появиться еще хотя бы два, то какой из них выполниться первым? Прочитав несколько статей, я пришел в замешательство!!!!
......в этой статье http://decada.org.ru/project/lessons/bascom_avr/10/ автор пишет : "Все прерывания в AVR имеют одинаковый приоритет. Это отличает их от других микроконтроллеров, где вы можете задать приоритет для каждого вида прерывания по отношению к другому."
......в другой статье http://samou4ka.net/page/vneshnie-preryvanija-mk-avr, другой автор пишет "Чем выше адрес прерывания, тем ниже приоритет прерывания. Т.е. в очереди прерываний, прерывания с большим приоритетом будут выполняться раньше."
..Люди добрые, подскажите кто прав а кто нет!!!
А чё, у AVR-а даже приоритеты прерываний нельзя настроить?
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Угу.. Небось скоро и до реализации других "полезностей" дойдут..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Здесь есть подмена понятий: приоритет прерывания, как способность прерывать выполнение обработчика с более низким приоритетом, и порядок обслуживания одновременно поступивших запросов. Порядок обслуживания у AVR действительно определяется адресом вектора. Но приоритет у всех прерываний одинаковый. Можно программно эмулировать приоритеты, если в нужных обработчиках разрешать вложенные прерывания.
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Ну так все нормально там: любое прерывание может "прервать" обработку текущего. Стек восьмиуровневый. Так что в сравнительно малый промежуток времени может сработать 8 прерываний. Ну а длительность промежутка определяется кривостью рук разработчика. Если нельзя прерывать обработку прерывания-то запрещаем прерывания глобально.
РадиоЛоматель писал(а):Стек восьмиуровневый. Так что в сравнительно малый промежуток времени может сработать 8 прерываний.
А если мя захочу внутри обработки что-то в стек "запихнуть"..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Не запущено, а заточено под конкретную вещь. В данном случае под дешевизну. И запущено по сравнению с чем? А, чего тут меряться... Всяк суслик в поле агроном. Каждый со своей колокольни. Ничегонеработает все ясно и толково объяснил по-русски. РадиоЛоматель! Каково ч....! При запросе на прерывание глобальное разрешение сбрасывается, все, доступ остальным запрещен. Восстанавливается по RETI.
Мя где-то читал, что архитектуру AVR придумали два студента после бочонка пива.. Куда уж там про обработку прерывания подумать..
P.S. Оффтопить больше не буду..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
pyzh_man писал(а):РадиоЛоматель! Каково ч....! При запросе на прерывание глобальное разрешение сбрасывается, все, доступ остальным запрещен. Восстанавливается по RETI.
pyzh_man, внимательно прочитайте последний абзац вашей вырезки из ДШ... Правда я действительно ошибся, прерывания надо наоборот разрешить, если необходимо. Но все равно прерываться обработка прерывания может.
При возникновении прерывания бит очищается, что запрещает прерывания. Пользовательская программа может записать логическую единицу в бит для того, чтобы включить вложенные прерывания. Тогда все последующие включенные прерывания могут прерывать текущую обработку прерывания. По возврату из прерывания бит автоматически устанавливается в единицу.
А в предидущем посте я написал, что ошибся про включить/выключить. Бывает, заскакивает что-то
Мя где-то читал, что архитектуру AVR придумали два студента после бочонка пива.. Куда уж там про обработку прерывания подумать..
P.S. Оффтопить больше не буду..
Мяу, МитяРа!
не знаю как АВР, а вот Мелкомягий начался с гаража, 4х студентов, 100 баксов на счету, ну и пива конечно, кудаж без него родимого
ЗЫ сорри за офтоп
РадиоЛоматель писал(а):
А в предидущем посте я написал, что ошибся про включить/выключить. Бывает, заскакивает что-то
А про 8 уровней?
Разрешив вложенные прерывания внутри друг друга, они так и будут сыпаться (при наступлении событий, разумеется), забивая стек адресами возврата. Примерно как возврат из подпрограммы через rjmp.
ploop писал(а):А про 8 уровней?
Разрешив вложенные прерывания внутри друг друга, они так и будут сыпаться (при наступлении событий, разумеется), забивая стек адресами возврата. Примерно как возврат из подпрограммы через rjmp.
Ну так тут уже все зависит от того, насколько быстро эти прерывания обрабатываются. Конечно, если начать в прерывании от таймера, например принимать данные по юарту со скоростью 1200 бод, то все загнется (пример очень нехорошего поведения програмиста). А если в прерывании лишь инкрементировать регистр, устанавливать битик, или что-то подобное-то все будет нормально. Возврат то из самого прерывания по RETI а не RJMP, а значит и стек подчищается.