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

 
 
 
Reply to this topicStart new topic
> ignoring #pragma vector, Почемуто игнорирует создания функции прерывания
zkrvova
сообщение Jul 26 2006, 11:15
Сообщение #1





Группа: Новичок
Сообщений: 10
Регистрация: 4-04-06
Пользователь №: 15 778



Хочу запустить пример с прерыванием:
#pragma vector=CANIT_vect
__interrupt void __interrupt_can_it(void)

но компилятор выдает:
warning:ignoring #pragma vector
error: syntax error before "void"


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

Помогите пожалуйста!

Заранее благодарен!
Go to the top of the page
 
+Quote Post
Мах
сообщение Jul 26 2006, 11:42
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 27
Регистрация: 13-01-06
Пользователь №: 13 122



Цитата(zkrvova @ Jul 26 2006, 15:15) *
Хочу запустить пример с прерыванием:
#pragma vector=CANIT_vect
__interrupt void __interrupt_can_it(void)

но компилятор выдает:
warning:ignoring #pragma vector
error: syntax error before "void"


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

Помогите пожалуйста!

Заранее благодарен!

Было вроде у меня такое я в ICCV7 for AVR пытался прерывание по 5 му вектору сделать.
В конце концов переделал программу под IAR

Сообщение отредактировал Мах - Jul 26 2006, 11:44
Go to the top of the page
 
+Quote Post
_Bill
сообщение Jul 26 2006, 11:50
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(zkrvova @ Jul 26 2006, 14:15) *
Хочу запустить пример с прерыванием:
#pragma vector=CANIT_vect
__interrupt void __interrupt_can_it(void)

но компилятор выдает:
warning:ignoring #pragma vector
error: syntax error before "void"


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

Помогите пожалуйста!

Заранее благодарен!

А Вы вектор правильно определили? Посмотрите, как он в заголовочном файле записан.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 26 2006, 12:01
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(zkrvova @ Jul 26 2006, 14:15) *
__interrupt

Нет такого слова. Есть __irq.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
_Bill
сообщение Jul 26 2006, 12:41
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(zltigo @ Jul 26 2006, 15:01) *
Цитата(zkrvova @ Jul 26 2006, 14:15) *

__interrupt

Нет такого слова. Есть __irq.

Ну, это как сказать.
Код
/*      Interrupt handlers      */

#pragma vector = TIMER0_OVF_vect
__interrupt void Timer0_Int(void)
        {
        TCNT0   = 100;                  // Reload TIMER0
        IntFlags |= TIMER0_BIT;         // Set the flag
        }

#pragma vector = TIMER1_COMPA_vect
__interrupt void Timer1_Int(void)
        {
        IntFlags |= TIMER1_BIT;        // Set the flag
        }
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 26 2006, 12:49
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(_Bill @ Jul 26 2006, 15:41) *
Ну, это как сказать.

Смотрим на ветку, которая называется "IAR how to" и прямо говорим - нету.
Правда это подветка "AVR" которым я не пользуюсь...
Так-что варианты конечно возможны :-)


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
dxp
сообщение Jul 26 2006, 13:10
Сообщение #7


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(zltigo @ Jul 26 2006, 19:49) *
Цитата(_Bill @ Jul 26 2006, 15:41) *

Ну, это как сказать.

Смотрим на ветку, которая называется "IAR how to" и прямо говорим - нету.
Правда это подветка "AVR" которым я не пользуюсь...
Так-что варианты конечно возможны :-)

Кроме AVR еще и для MSP430 тоже используется вариант __interrupt. И для других тоже - это вообще их (IAR) традиционный вариант, который ранее был просто interrupt, а позже они привели его к более кошерному __interrupt. Т.ч. АРМ тут как раз в меньшинстве. smile.gif


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
zkrvova
сообщение Jul 26 2006, 13:18
Сообщение #8





Группа: Новичок
Сообщений: 10
Регистрация: 4-04-06
Пользователь №: 15 778



Цитата
А Вы вектор правильно определили? Посмотрите, как он в заголовочном файле записан.

В файле iocanxx.h определено вот так:

/* CAN Transfer Complete or Error */
#define CANIT_vect _VECTOR(18)
#define SIG_CAN_INTERRUPT1 _VECTOR(18)

Пробовал я писать #pragma vector=18
Тоже самое.

С __irq тоже самое.

Что делать?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 26 2006, 13:26
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(dxp @ Jul 26 2006, 16:10) *
Кроме AVR еще и ...

Да __interrupt это максимально "правильное" всеми и вся используемое ключевое слово.
Я его не раз автоматически при переползании под EWARM писал и чертыхался. Поэтому так и
отреагировал :-( на сочетание IAR и __interrupt.
Интересно какого черта для ARM сделали "исключение"?
Короче, сейчас в свой любимый header вписал:
Код
#define __interrupt __irq __arm

Дабы все "правильно" было.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
_Bill
сообщение Jul 26 2006, 13:36
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(zkrvova @ Jul 26 2006, 16:18) *
Цитата
А Вы вектор правильно определили? Посмотрите, как он в заголовочном файле записан.

В файле iocanxx.h определено вот так:

/* CAN Transfer Complete or Error */
#define CANIT_vect _VECTOR(18)
#define SIG_CAN_INTERRUPT1 _VECTOR(18)

Пробовал я писать #pragma vector=18
Тоже самое.

С __irq тоже самое.

Что делать?

Посмотрите в опциях проекта настройки C/C++ Compiler->Language
Go to the top of the page
 
+Quote Post
zkrvova
сообщение Jul 26 2006, 13:48
Сообщение #11





Группа: Новичок
Сообщений: 10
Регистрация: 4-04-06
Пользователь №: 15 778



У меня AVR Studio
В опциях проэкта я нашёл:
Custom Compilation Options:
All files -Wall -gdwarf-2 -O0

Используется WinAVR

Других настроек ненашёл.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 26 2006, 16:59
Сообщение #12


Гуру
******

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



Цитата(zkrvova @ Jul 26 2006, 16:48) *
У меня AVR Studio
В опциях проэкта я нашёл:
Custom Compilation Options:
All files -Wall -gdwarf-2 -O0

Используется WinAVR

Других настроек ненашёл.
Так и спрашивать надо было не в этом подфоруме. WinAVR - совершенно другой компилятор. Читайте в папке \doc в описании avrlibc как оформляются прерывания в WinAVR. Раздел (если память не изменяет) interrupt.h


--------------------
На любой вопрос даю любой ответ
"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
zkrvova
сообщение Jul 27 2006, 06:14
Сообщение #13





Группа: Новичок
Сообщений: 10
Регистрация: 4-04-06
Пользователь №: 15 778



Извиняюсь что не в в ту тему написал.

Спасибо!
Go to the top of the page
 
+Quote Post

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

 


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


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