|
Прерывания в Atmel 8535 |
|
|
|
Jun 3 2008, 20:48
|

Частый гость
 
Группа: Свой
Сообщений: 120
Регистрация: 19-02-08
Пользователь №: 35 166

|
У меня возникла парочка вопросов по прерываниям, смотрел в документации - не нашел. Если сможете - подскажите, пожалуйста. Как я понял из документации, при входе в обработчик прерывания все остальные прерывания запрещаются, ведь так? То есть неявно выполняется инструкция cli. А что происхоит в случае, если за время обработки происходит внешнее прерывание, INT0, к примеру? Информация о нем отбрасывается или остается где-то? Дело в том, что я пишу обработчик и мне надо знать было ли за время работы обработчика прерывание. Если было, то после выхода вызвать другой обработчик... И ещё вопрос: как я понял, приоритет у всех внешних прерываний одинаковый, ведь так? А назначить приоритет можно только программно, правда? Спасибо.
--------------------
Все будет хорошо! Я проверял!
|
|
|
|
|
 |
Ответов
|
Jun 6 2008, 06:11
|

Знающий
   
Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065

|
Цитата(DMD @ Jun 4 2008, 04:24)  А есть возможность как-нибудь очистить вот эту очередь прерываний? Я имею ввиду сделать так, чтобы после обработки текущего отложенные прерывания не выполнялись?.. Куда хоть посмотреть можно? Возвращайтесь из обработчика прерывания не по команде RETI, а по команде RET. Разница в том, что RETI насильственно устанавливает флаг I в регистре SREG, а команда RET -- флаги в регистре не трогает вообще. И не забудьте про регистры, которые вы в начале обработчика сохранили в стеке. А флаги конкретных прерываний (которые имели наглость установиться за это время) снимайте сами, как это посоветовал dENIM.
Сообщение отредактировал zhevak - Jun 6 2008, 06:13
--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
|
|
|
|
|
Jun 7 2008, 07:52
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(zhevak @ Jun 6 2008, 10:11)  Возвращайтесь из обработчика прерывания не по команде RETI, а по команде RET. Возвращаться из обработчика по команде RET нельзя! Цитата(zhevak @ Jun 6 2008, 10:11)  Разница в том, что RETI насильственно устанавливает флаг I в регистре SREG, а команда RET -- флаги в регистре не трогает вообще. Вот именно! А их надо восстанавливать. Что тебе насчитает основная программа, если прерывания будут периодически портить регистр состояния?
|
|
|
|
|
Jun 7 2008, 10:38
|

Знающий
   
Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065

|
Цитата(777777 @ Jun 7 2008, 13:52)  Возвращаться из обработчика по команде RET нельзя! Да, почему нельзя? Если ты пишешь код и четко понимаешь как он исполняется, то какие проблемы? У человека стоит задача __необрабатывать__ второе прерывание, если одновременно пришли "оба-два", или флаг второго прерывания поднялся до окончания обработки первого. Другое дело, что может быть человек не до конца еще понимает ситуацию, что нужно делать, т.е. еще нет четкого понятия как девайс должен работать. Отсюда такие несколько странные условия задачи. Но этот вопрос находится уже в другой плоскости. Я не вижу здесь ни каких проблем. Не традиционный подход? -- Да. Опасные игры с кодом? -- Да. Но если ты четко знаешь, что происходит, то какие проблемы? По моему, здесь как раз и проходит грань между программированием, как "технология", и программированием, как "искусство". А вообще, беспредметно спорить, только время терять.
--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
|
|
|
|
|
Jun 9 2008, 04:29
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(zhevak @ Jun 7 2008, 14:38)  Я не вижу здесь ни каких проблем. Не традиционный подход? -- Да. Опасные игры с кодом? -- Да. Но если ты четко знаешь, что происходит, то какие проблемы? По моему, здесь как раз и проходит грань между программированием, как "технология", и программированием, как "искусство". Проблема в том, что это только сегодня ты четко знаешь, что происходит, через неделю будешь смутно вспоминать, а через месяц вообще забудешь. А код понадобится модернизировать. А если это будет делать другой программист? Думаешь он разделит твой восторг от отношения к программированию как к искусству?  А твой работодатель, боюсь, вообще будет категорически против. Потому что ему не видно твоего искусства, он видит только как работает устройство, есть там глюки или нет, и если они есть, то хвалится красотой исходного кода бессмысленно - никто не оценит. Да и пользы от всяких хитроумных трюков обычно никакой нет - даже если экономится 10-20% памяти, все равно оставшуюся неиспользуемую память ты никуда не денешь. И даже когда программа не помещается в памяти, выгоднее вместо ATmega8535 поставить ATmega16, чем мудрить с разного рода программистскими трюками - в конце концов они тебе выйдут боком. Так что, с точки зрения бизнеса, к программированию надо относиться как к серийному производству, смотреть на устройство глазами пользователя, а не искусствоведа, приходящего в восторг от красиво написанного исходного кода. Цитата(zhevak @ Jun 7 2008, 14:38)  А вообще, беспредметно спорить, только время терять. Ну почему же, спроить всегда полезно, в спорах, как известно, рождается истина.
Сообщение отредактировал 777777 - Jun 9 2008, 04:39
|
|
|
|
Сообщений в этой теме
DMD Прерывания в Atmel 8535 Jun 3 2008, 20:48 Qwertty Цитата(DMD @ Jun 4 2008, 00:48) Если было... Jun 3 2008, 21:17 smac Цитата(Qwertty @ Jun 4 2008, 01:17) Это п... Jun 6 2008, 12:23  Т.Достоевский Цитата(smac @ Jun 6 2008, 16:23) ... в ко... Jun 6 2008, 20:01 777777 Цитата(Qwertty @ Jun 4 2008, 01:17) Возмо... Jun 7 2008, 04:00 artemm Цитата(Qwertty @ Jun 4 2008, 00:17) Возмо... Jun 9 2008, 05:56  Maik-vs Цитата(artemm @ Jun 9 2008, 09:56) Если р... Jun 9 2008, 09:31  alx2 Цитата(artemm @ Jun 9 2008, 10:56) Если р... Jun 9 2008, 20:28 dENIM Цитата(DMD @ Jun 4 2008, 01:24) А есть во... Jun 3 2008, 23:27     zhevak Цитата(777777 @ Jun 9 2008, 10:29) Пробле... Jun 9 2008, 06:43    defunct Цитата(zhevak @ Jun 7 2008, 13:38) Да, по... Jun 9 2008, 11:42     Maik-vs Цитата(defunct @ Jun 9 2008, 15:42) И буд... Jun 10 2008, 12:39      defunct Цитата(Maik-vs @ Jun 10 2008, 15:39)... Jun 10 2008, 14:22       galjoen Цитата(defunct @ Jun 10 2008, 18:22) На а... Jun 10 2008, 15:17        777777 Цитата(galjoen @ Jun 10 2008, 19:17) А я ... Jun 11 2008, 05:51         galjoen Цитата(777777 @ Jun 11 2008, 09:51) Вмест... Jun 11 2008, 14:56       Maik-vs Вот оно, ключевое слово:
Цитата(defunct @ Jun... Jun 12 2008, 11:11        defunct Цитата(Maik-vs @ Jun 12 2008, 14:11)... Jun 12 2008, 18:49         sKWO Цитата(defunct @ Jun 12 2008, 22:49) Если... Jun 13 2008, 10:42         Maik-vs Цитата(defunct @ Jun 12 2008, 22:49) Если... Jun 14 2008, 18:52        sKWO Цитата(Maik-vs @ Jun 12 2008, 15:11)... Jun 15 2008, 09:05 733259 ЦитатаДело в том, что я пишу обработчик и мне надо... Jun 13 2008, 18:09 733259 Не по теме, но не удержался Кодregister uint8_t ... Jun 15 2008, 09:42
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|