Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ignoring #pragma vector
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
zkrvova
Хочу запустить пример с прерыванием:
#pragma vector=CANIT_vect
__interrupt void __interrupt_can_it(void)

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


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

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

Заранее благодарен!
Мах
Цитата(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
_Bill
Цитата(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"


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

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

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

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

Нет такого слова. Есть __irq.
_Bill
Цитата(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
        }
zltigo
Цитата(_Bill @ Jul 26 2006, 15:41) *
Ну, это как сказать.

Смотрим на ветку, которая называется "IAR how to" и прямо говорим - нету.
Правда это подветка "AVR" которым я не пользуюсь...
Так-что варианты конечно возможны :-)
dxp
Цитата(zltigo @ Jul 26 2006, 19:49) *
Цитата(_Bill @ Jul 26 2006, 15:41) *

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

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

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

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

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

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

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

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

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

Дабы все "правильно" было.
_Bill
Цитата(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
zkrvova
У меня AVR Studio
В опциях проэкта я нашёл:
Custom Compilation Options:
All files -Wall -gdwarf-2 -O0

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

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

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

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

Спасибо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.