реклама на сайте
подробности

 
 
> Замена обработчика прерывания в WinAVR
PhX
сообщение Dec 16 2008, 04:23
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 473
Регистрация: 10-09-06
Из: Тольятти. Самарская обл.
Пользователь №: 20 249



Нужно использовать различные обработчики прерывания в зависимости от случая. Например в начале программы
обработчик_пр = функция 1
Код
ISR(INT1_vect)
{
обработчик_пр
}

а затем где-то по далее необходимо заменить его на
обработчик_пр = функция 2
Как это грамотно сделать в WinAVR?


--------------------
Если все, то не я...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
singlskv
сообщение Dec 16 2008, 18:44
Сообщение #2


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Господа, Вы занимаетесь просто какой-то х.р..й ... smile.gif smile.gif smile.gif
Вот это обертка в асм файле isr.s :
Код
.extern curr_isr
.global TIMER1_COMPA_vect; прерывание с переключаемым обработчиком
TIMER1_COMPA_vect:
  push  r30
  push  r31
  lds   r30, curr_isr
  lds   r31, curr_isr + 1
  icall
  pop   r31
  pop   r30
  reti


а вот это сам файл с обработчиками и примером:
Код
#include <avr/io.h>
#include <avr/interrupt.h>

volatile unsigned char tmp;

void INT0_vect(void) __attribute__((interrupt)); // свободный вектор прерывания
void INT0_vect(void)
{
  tmp = 0; // тело обработчика 0
}

void INT1_vect(void) __attribute__((interrupt)); // свободный вектор прерывания
void INT1_vect(void)
{
  tmp = 1; // тело обработчика 1
}

//Указатель на функцию обработчик
void (* curr_isr)(void) = INT1_vect;

int main(void)
{
  curr_isr = INT1_vect;
  asm("sei");
  while (1);
}

Накладные расходы примерно 16МЦ... на фсе...
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 16 2008, 19:50
Сообщение #3


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(singlskv @ Dec 16 2008, 22:44) *
Господа, Вы занимаетесь просто какой-то х.р..й ... smile.gif smile.gif smile.gif

Кому х.р.я, а кому - сын ошибок трудных. smile.gif
Т.е. получается, что __attribute__((interrupt)) и заставляет все call-used регистры сохранять внутри функции?
Цитата
Кстати Ваш ужас ...

Как приятно иногда сказать: знатоки, блин. lol.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- PhX   Замена обработчика прерывания в WinAVR   Dec 16 2008, 04:23
- - 733259   ИМХО никак, т.к. в AVR адреса векторов фиксированы...   Dec 16 2008, 04:35
- - MrYuran   Определить указатель на функцию и поставить его в ...   Dec 16 2008, 05:59
|- - PhX   Цитата(MrYuran @ Dec 16 2008, 09:59) Опре...   Dec 16 2008, 06:13
|- - ReAl   Цитата(PhX @ Dec 16 2008, 08:13) Кодint m...   Dec 16 2008, 07:49
|- - PhX   Цитата(ReAl @ Dec 16 2008, 11:49) Оно, ко...   Dec 16 2008, 09:19
|- - defunct   Цитата(PhX @ Dec 16 2008, 11:19) Ну хоть ...   Dec 20 2008, 01:03
- - Qwertty   Вызов функции по указателю внутри обработчика веде...   Dec 16 2008, 08:36
|- - MrYuran   Цитата(Qwertty @ Dec 16 2008, 11:36) Вызо...   Dec 17 2008, 11:34
|- - _Pasha   Цитата(MrYuran @ Dec 17 2008, 15:34) а чт...   Dec 17 2008, 11:46
|- - Сергей Борщ   Цитата(_Pasha @ Dec 17 2008, 13:46) Не, т...   Dec 17 2008, 14:31
- - _Pasha   Векторизация прерываний. Например, int1 Soft_vect...   Dec 16 2008, 09:19
|- - _Pasha   Цитата(_Pasha @ Dec 16 2008, 13:19) Прост...   Dec 16 2008, 09:38
|- - aesok   Цитата(_Pasha @ Dec 16 2008, 12:19) Векто...   Dec 16 2008, 10:23
|- - _Pasha   Цитата(aesok @ Dec 16 2008, 14:23) Компил...   Dec 16 2008, 10:48
|- - _Pasha   Цитата(aesok @ Dec 16 2008, 14:23) Компил...   Dec 16 2008, 18:10
- - 733259   А в своем теле функция никакие регистры не использ...   Dec 16 2008, 11:24
|- - _Pasha   Цитата(733259 @ Dec 16 2008, 15:24) А в с...   Dec 16 2008, 11:38
- - ARV   в некоторых случаях можно делать перезапись вектор...   Dec 16 2008, 17:04
|- - singlskv   Цитата(_Pasha @ Dec 16 2008, 22:50) Т.е. ...   Dec 16 2008, 20:03
- - 733259   ЦитатаСправедливости ради, такой подход имеет один...   Dec 17 2008, 02:01
|- - _Pasha   Цитата(733259 @ Dec 17 2008, 06:01) прави...   Dec 17 2008, 10:17
|- - singlskv   Цитата(_Pasha @ Dec 17 2008, 13:17) Следо...   Dec 17 2008, 11:09
|- - ReAl   Цитата(_Pasha @ Dec 17 2008, 12:17) Есть ...   Dec 20 2008, 16:00
|- - _Pasha   Цитата(ReAl @ Dec 20 2008, 20:00) посмотр...   Dec 20 2008, 16:26
- - Rst7   Не знаю, можно ли все, что я тут напишу, реализова...   Dec 17 2008, 07:42
- - 733259   Что Ваш вариант в 20 тактов, что через icall в 21....   Dec 17 2008, 07:55
- - Rst7   ЦитатаЧто Ваш вариант в 20 тактов, что через icall...   Dec 17 2008, 08:19
- - ReAl   Я погонял компиляцию этого дела в разных режимах. ...   Dec 20 2008, 16:34
- - _Pasha   Цитата(ReAl @ Dec 20 2008, 20:34) что даё...   Dec 20 2008, 16:49


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 15:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01409 секунд с 7
ELECTRONIX ©2004-2016