zkrvova 0 26 июля, 2006 Опубликовано 26 июля, 2006 · Жалоба Хочу запустить пример с прерыванием: #pragma vector=CANIT_vect __interrupt void __interrupt_can_it(void) но компилятор выдает: warning:ignoring #pragma vector error: syntax error before "void" Мне кажется что вторая ошибка происходит из-за первого предупреждения, но почему это вылазит и как это побороть незнаю. Помогите пожалуйста! Заранее благодарен! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jmax 0 26 июля, 2006 Опубликовано 26 июля, 2006 (изменено) · Жалоба Хочу запустить пример с прерыванием: #pragma vector=CANIT_vect __interrupt void __interrupt_can_it(void) но компилятор выдает: warning:ignoring #pragma vector error: syntax error before "void" Мне кажется что вторая ошибка происходит из-за первого предупреждения, но почему это вылазит и как это побороть незнаю. Помогите пожалуйста! Заранее благодарен! Было вроде у меня такое я в ICCV7 for AVR пытался прерывание по 5 му вектору сделать. В конце концов переделал программу под IAR Изменено 26 июля, 2006 пользователем Мах Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bill 0 26 июля, 2006 Опубликовано 26 июля, 2006 · Жалоба Хочу запустить пример с прерыванием: #pragma vector=CANIT_vect __interrupt void __interrupt_can_it(void) но компилятор выдает: warning:ignoring #pragma vector error: syntax error before "void" Мне кажется что вторая ошибка происходит из-за первого предупреждения, но почему это вылазит и как это побороть незнаю. Помогите пожалуйста! Заранее благодарен! А Вы вектор правильно определили? Посмотрите, как он в заголовочном файле записан. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 26 июля, 2006 Опубликовано 26 июля, 2006 · Жалоба __interrupt Нет такого слова. Есть __irq. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bill 0 26 июля, 2006 Опубликовано 26 июля, 2006 · Жалоба __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 } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 26 июля, 2006 Опубликовано 26 июля, 2006 · Жалоба Ну, это как сказать. Смотрим на ветку, которая называется "IAR how to" и прямо говорим - нету. Правда это подветка "AVR" которым я не пользуюсь... Так-что варианты конечно возможны :-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 65 26 июля, 2006 Опубликовано 26 июля, 2006 · Жалоба Ну, это как сказать. Смотрим на ветку, которая называется "IAR how to" и прямо говорим - нету. Правда это подветка "AVR" которым я не пользуюсь... Так-что варианты конечно возможны :-) Кроме AVR еще и для MSP430 тоже используется вариант __interrupt. И для других тоже - это вообще их (IAR) традиционный вариант, который ранее был просто interrupt, а позже они привели его к более кошерному __interrupt. Т.ч. АРМ тут как раз в меньшинстве. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zkrvova 0 26 июля, 2006 Опубликовано 26 июля, 2006 · Жалоба А Вы вектор правильно определили? Посмотрите, как он в заголовочном файле записан. В файле iocanxx.h определено вот так: /* CAN Transfer Complete or Error */ #define CANIT_vect _VECTOR(18) #define SIG_CAN_INTERRUPT1 _VECTOR(18) Пробовал я писать #pragma vector=18 Тоже самое. С __irq тоже самое. Что делать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 26 июля, 2006 Опубликовано 26 июля, 2006 · Жалоба Кроме AVR еще и ... Да __interrupt это максимально "правильное" всеми и вся используемое ключевое слово. Я его не раз автоматически при переползании под EWARM писал и чертыхался. Поэтому так и отреагировал :-( на сочетание IAR и __interrupt. Интересно какого черта для ARM сделали "исключение"? Короче, сейчас в свой любимый header вписал: #define __interrupt __irq __arm Дабы все "правильно" было. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bill 0 26 июля, 2006 Опубликовано 26 июля, 2006 · Жалоба А Вы вектор правильно определили? Посмотрите, как он в заголовочном файле записан. В файле 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zkrvova 0 26 июля, 2006 Опубликовано 26 июля, 2006 · Жалоба У меня AVR Studio В опциях проэкта я нашёл: Custom Compilation Options: All files -Wall -gdwarf-2 -O0 Используется WinAVR Других настроек ненашёл. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 26 июля, 2006 Опубликовано 26 июля, 2006 · Жалоба У меня AVR Studio В опциях проэкта я нашёл: Custom Compilation Options: All files -Wall -gdwarf-2 -O0 Используется WinAVR Других настроек ненашёл. Так и спрашивать надо было не в этом подфоруме. WinAVR - совершенно другой компилятор. Читайте в папке \doc в описании avrlibc как оформляются прерывания в WinAVR. Раздел (если память не изменяет) interrupt.h Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zkrvova 0 27 июля, 2006 Опубликовано 27 июля, 2006 · Жалоба Извиняюсь что не в в ту тему написал. Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться