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

 
 
 
Reply to this topicStart new topic
> Два вектора на одно прерывание, Как?
SasaVitebsk
сообщение Jul 17 2006, 22:59
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Мне необходимо для двух векторов назначить одно и то же прерывание. Я пробую это сделать так.

#pragma vector=TIMER3_COMPA_vect // Отображение картинки Master
#pragma vector=INT7_vect // Отображение картинки Slave
__interrupt void Regeneration(void)

Система выдаёт предупреждение, что типо только одна является активной. Ну и нафига она за меня думает. smile.gif В данном случае это очень красивый и продуманный шаг. Но как сделать?
Go to the top of the page
 
+Quote Post
arttab
сообщение Jul 18 2006, 01:15
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Непонятно из Вашего кода как Вы это объявляете.
А вариант с обычным определением векторов и вызовом из них одной и той же функции Вас не устроит?


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Jul 18 2006, 03:25
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



Цитата(SasaVitebsk @ Jul 18 2006, 04:59) *
Мне необходимо для двух векторов назначить одно и то же прерывание. Я пробую это сделать так.

#pragma vector=TIMER3_COMPA_vect // Отображение картинки Master
#pragma vector=INT7_vect // Отображение картинки Slave
__interrupt void Regeneration(void)

Система выдаёт предупреждение, что типо только одна является активной. Ну и нафига она за меня думает. smile.gif В данном случае это очень красивый и продуманный шаг. Но как сделать?


#pragma vector относится к функции, определенной следом. В вашем случае компилятор не может разобраться, какой вектор вы хотите назначить своей функции.

Код
void Regeneration(void)
{
...
}


#pragma vector=TIMER3_COMPA_vect                
__interrupt void T3_isr(void)
{
    Regeneration();
}

#pragma vector=INT7_vect                              
__interrupt void INT7_isr(void)
{
    Regeneration();
}


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
andrvisht
сообщение Jul 18 2006, 06:20
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



Цитата(SasaVitebsk @ Jul 18 2006, 01:59) *
Мне необходимо для двух векторов назначить одно и то же прерывание. Я пробую это сделать так.

#pragma vector=TIMER3_COMPA_vect // Отображение картинки Master
#pragma vector=INT7_vect // Отображение картинки Slave
__interrupt void Regeneration(void)

Система выдаёт предупреждение, что типо только одна является активной. Ну и нафига она за меня думает. smile.gif В данном случае это очень красивый и продуманный шаг. Но как сделать?


Z пробовал так, в симуляторе работает, думаю в железке тоже пойдет.
Код
#pragma vector = USART0_UDRE_vect, USART0_TXC_vect
#pragma inline = forced
__interrupt static void UDRE_TXC_INT(void)
{
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 18 2006, 07:44
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Andy Mozzhevilov @ Jul 18 2006, 06:25) *
Код
void Regeneration(void)
{
...
}

Я бы даже сказал
Код
static void Regeneration(void)
{
...
}



Цитата(&-rey @ Jul 18 2006, 09:20) *
Код
#pragma vector = USART0_UDRE_vect, USART0_TXC_vect
Красиво! Даже и в голову не приходило такое :-)

Сообщение отредактировал Сергей Борщ - Jul 18 2006, 07:46


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jul 18 2006, 22:17
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Спасибо ребята. Почти всё понял.
Только начинаю разбираться с С. Написал и практически полностью отладил первую большую прогу. Горд собой. smile.gif

А Вы меня деталями своих ответов ставите в тупик. smile.gif
Например
1) static void Regeneration(void) - Что даёт тут статик?
2) #pragma inline = forced - несовсем разобрался для чего это применяется
Go to the top of the page
 
+Quote Post
andrvisht
сообщение Jul 19 2006, 06:59
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



Цитата(SasaVitebsk @ Jul 19 2006, 01:17) *
Спасибо ребята. Почти всё понял.
Только начинаю разбираться с С. Написал и практически полностью отладил первую большую прогу. Горд собой. smile.gif

А Вы меня деталями своих ответов ставите в тупик. smile.gif
Например
1) static void Regeneration(void) - Что даёт тут статик?
2) #pragma inline = forced - несовсем разобрался для чего это применяется

это все можно и поиском найти.
Static говорит что данная функция будет вызываться только из этого модуля.
#pragma inline = forced заставляет всраивать функцию несмотря ни на какие мысли компилятора.
это нужно в прерываниях чтобы сэкономить на сохраняемых в стеке регистрах.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jul 19 2006, 23:45
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Спасибо огромное за пояснения.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 04:59
Рейтинг@Mail.ru


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