Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
05.03.2009, 15:23
|
|
Временная регистрация
Регистрация: 15.08.2006
Сообщений: 54
Сказал спасибо: 3
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
обработчики прерываний микроконтроллеров AVR
Добрый день. Подскажите пожалуста, как можно реализовать разные обработчики одного и того же прерывания для раных режимов работы.
Заранее спасибо.
|
|
|
|
05.03.2009, 15:33
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
Проверкой флагов условий в прерывании наверно.
Можно if или switch попробовать -
"Си для микроконтроллеров" http://avr123.nm.ru/05.htm
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
05.03.2009, 15:45
|
|
Временная регистрация
Регистрация: 15.08.2006
Сообщений: 54
Сказал спасибо: 3
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Сообщение от avr123-nm-ru
|
Проверкой флагов условий в прерывании наверно.
Можно if или switch попробовать
|
Это первое что, приходит в голову. Может есть более изящное решение?
|
|
|
|
05.03.2009, 17:25
|
|
Прописка
Регистрация: 22.09.2006
Адрес: Днепропетровск
Сообщений: 114
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Ну вектора прерываний переназначить нельзя.
По этим векторам расположены команды перехода к обработчикам прерываний. Вот в обработчиках свой алгоритм и стройте на здоровье.
|
|
|
|
05.03.2009, 18:16
|
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,955
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
|
Сообщение от delamoure
|
Ну вектора прерываний переназначить нельзя
|
Но можно пошаманить. Например, завести переменную с адресом обработчика. В "железном" - засунуть содержимое этой переменной в стек и сделать RET, или в Z и сделать IJMP...
Для Си это, конечно, не годится, так как придется сохранять все РОН.
|
|
|
|
05.03.2009, 18:45
|
|
Временная регистрация
Регистрация: 29.09.2006
Сообщений: 64
Сказал спасибо: 0
Сказали Спасибо 23 раз(а) в 1 сообщении
|
В Си использовать переменную типа указатель на функцию, а в прерывании вызывать указанную функцию по указателю.
|
|
|
|
05.03.2009, 19:20
|
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,955
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
|
Сообщение от GLVlad
|
В Си использовать переменную типа указатель на функцию, а в прерывании вызывать указанную функцию по указателю.
|
Делать такое из обработчика нехорошо по той же причине - перед вызовом генерится сохранение всех используемых РОН, что нехорошо со всех точек зрения. А прерывание - как хороший тост - должно быть коротким и конкретным.
|
|
|
|
05.03.2009, 22:07
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
Сообщение от nml
|
прерывание - как хороший тост - должно быть коротким и конкретным.
|
В аналы !
Я внчале то не въехал - думал тост жареный хлеб думал - что значит короткий тост ??? он ведь квадратный обычно.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
06.03.2009, 00:40
|
|
Временная регистрация
Регистрация: 29.09.2006
Сообщений: 64
Сказал спасибо: 0
Сказали Спасибо 23 раз(а) в 1 сообщении
|
Сообщение от nml
|
Сообщение от GLVlad
|
В Си использовать переменную типа указатель на функцию, а в прерывании вызывать указанную функцию по указателю.
|
Делать такое из обработчика нехорошо по той же причине - перед вызовом генерится сохранение всех используемых РОН, что нехорошо со всех точек зрения. А прерывание - как хороший тост - должно быть коротким и конкретным.
|
Си все равно генерит пролог к обработчику прерываний, где сохраняет РОН и SREG. Ну и восстанавливает их при выходе из обработчика.
Понятно, что если написать обработчик на асме, то генерацию стандартного пролога можно отключить (если позволяет компилятор), т.к. можно написать свой, учитывающий только те регистры, что используются в обработчике, и соответственно меньшего размера. Но идея исспользовать переменную указатель на функцию в Си, или адрес в Асме по сути одна и та же.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:06.
|
|