|
|
  |
ignoring #pragma vector, Почемуто игнорирует создания функции прерывания |
|
|
|
Jul 26 2006, 11:15
|
Группа: Новичок
Сообщений: 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"
Мне кажется что вторая ошибка происходит из-за первого предупреждения, но почему это вылазит и как это побороть незнаю.
Помогите пожалуйста!
Заранее благодарен!
|
|
|
|
|
Jul 26 2006, 11:42
|

Участник

Группа: Новичок
Сообщений: 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
|
|
|
|
|
Jul 26 2006, 11:50
|
Местный
  
Группа: Участник
Сообщений: 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"
Мне кажется что вторая ошибка происходит из-за первого предупреждения, но почему это вылазит и как это побороть незнаю.
Помогите пожалуйста!
Заранее благодарен! А Вы вектор правильно определили? Посмотрите, как он в заголовочном файле записан.
|
|
|
|
|
Jul 26 2006, 12:41
|
Местный
  
Группа: Участник
Сообщений: 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 }
|
|
|
|
|
Jul 26 2006, 12:49
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jul 26 2006, 13:10
|

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. Т.ч. АРМ тут как раз в меньшинстве.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Jul 26 2006, 13:18
|
Группа: Новичок
Сообщений: 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 тоже самое. Что делать?
|
|
|
|
|
Jul 26 2006, 13:26
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jul 26 2006, 13:36
|
Местный
  
Группа: Участник
Сообщений: 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
|
|
|
|
|
Jul 26 2006, 13:48
|
Группа: Новичок
Сообщений: 10
Регистрация: 4-04-06
Пользователь №: 15 778

|
У меня AVR Studio В опциях проэкта я нашёл: Custom Compilation Options: All files -Wall -gdwarf-2 -O0
Используется WinAVR
Других настроек ненашёл.
|
|
|
|
|
Jul 27 2006, 06:14
|
Группа: Новичок
Сообщений: 10
Регистрация: 4-04-06
Пользователь №: 15 778

|
Извиняюсь что не в в ту тему написал.
Спасибо!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|