Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите разобраться с прерыванием в ИАРе
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
FREEKER
Помогите разобраться с таймером.
Компилятор ругается на эти строки (Конкретно на идентификатор "vector"... и всякие другие предупреждения):
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
Контроллер MSP430F169.
Может что то забыл подключить или указать?
Сергей Борщ
Цитата(FREEKER @ Jul 26 2007, 01:06) *
Компилятор ругается на эти строки (Конкретно на идентификатор "vector"... и всякие другие предупреждения):
#include <msp430x16x.h> ?
rezident
Цитата(FREEKER @ Jul 26 2007, 04:06) *
Помогите разобраться с таймером.
Компилятор ругается на эти строки (Конкретно на идентификатор "vector"... и всякие другие предупреждения):
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
Контроллер MSP430F169.
Может что то забыл подключить или указать?

Судя по всему, вы забыли включить заголовочный файл с описанием стандартных для TI имен.
Строка вида
Код
#include <msp430x16x.h>

у вас в программе имеется?
FREEKER
#include <msp430x16x.h> конечно имеется.
Для проверки я взял пример из Slac069b/fet140_ta_01.c заменил на #include <msp430x16x.h>
Но ошибки все теже.
Есть особые разницы между 149 и 169? Раньше разницы не наблюдал.
Или с Workbench, чего случилось....
aag
попробуйте так:
Код
#include <msp430x16x.h>

bool a;

#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A0_ISR(void)
{
   a = !a;
   if (a)
     P1OUT = 0x01;
   else
     P1OUT = 0x00;
}

int main()
{
  WDTCTL = WDTPW + WDTHOLD;

  P1DIR = 0xFF;
  P1SEL = 0x00;


  TACCTL0 = CCIE;
  TACCR0 = 50000;
  TACTL = TASSEL_2 | MC_1;

  a = false;

  _EINT();

  _BIS_SR(LPM0_bits | GIE);

  return 0;
}


этот код 100% рабочий (только что проверил)

Если будет продолжать ругаться, тогда остается один вопрос - какой у вас компилятор?
NoName
interrupt [ TIMERA0_VECTOR ] void TimerA( void ) {...} - в предыдущем поколении ИАР, только вот 169 они не поддерживали, или что то с настройками проекта, например под ИАР 3.30 что то подобное было, возможно помогло #pragma language=extended, точно не помню.
rezident
Цитата(FREEKER @ Jul 26 2007, 13:29) *
#include <msp430x16x.h> конечно имеется.
Для проверки я взял пример из Slac069b/fet140_ta_01.c заменил на #include <msp430x16x.h>
Но ошибки все теже.

Какая версия компилятора у вас? Какие именно ошибки? Скриншот приложите или укажите номер/сообщение.
Правой кнопкой мыши на TIMERA0_VECTOR кликните и выберите Go to definition of TIMERA0_VECTOR. Должно перейти на define с этим именем. Если не переходит, то значит символьное имя не определено или хидер не подключился или вообще отсутствует.
Цитата(FREEKER @ Jul 26 2007, 13:29) *
Есть особые разницы между 149 и 169? Раньше разницы не наблюдал.
Или с Workbench, чего случилось....

Если не используете DMA, DAC и SVS, то других особых отличий у них не припомню. Тогда можно использовать хидер msp430x14x.h, если с ним работает.
Кстати, в последних версиях IAR можно использовать такое описание процедуры прерывания
Код
#pragma vector=TIMERA0_VECTOR
#pragma type_attribute=__interrupt
void Timer_A0_ISR(void)
{
....
}
FREEKER
Версия WorkBench 2.31E, все программы под ним делал. Есть версия 3.41a, но под ней не работаю, хотя наверно придётся перейти. Хидеры (14x, 16x) менял уже, результат один. Даже вытаскивал из 3.41 в 2.31 (для эксперимента), оказалось, они незаменяемые.
Скорее всего дело в версии. Всем Спасибо. Пойду пробовать код под разными версиями. Если не получится, выложу скриншоты.
FREEKER
Проблема в версии была. Заработало. smile.gif
rezident
Цитата(FREEKER @ Jul 27 2007, 12:24) *
ВХидеры (14x, 16x) менял уже, результат один. Даже вытаскивал из 3.41 в 2.31 (для эксперимента), оказалось, они незаменяемые.

Кроме хидеров нужно еще и xcl-файлы копировать.
P.S. текущая версия ИАР ЕВ430 3.42E вроде бы, однако скачать дают только 3.42A.
FREEKER
Опять косяк..... Но наоборот теперь.
В новой версии IAR ругается на строку:
interrupt[ADC_VECTOR] void ADC12_ISR (void)
В старой работает.
Что забыл подключить?
Это есть: #include <msp430x16x.h>....
Просто перенёс прогу из 2.31 в 3.41.
rezident
Вы видимо невнимательно прочитали документы MSP430 Migration Guide и MSP430 C/C++ Compiler Reference Guide или просто манкировали этой необходимостью wink.gif
В новой версии компилятора прерывание должно оформляться так
Код
#pragma vector=ADC_VECTOR
__interrupt void ADC12_ISR(void)
{
...
}
или так
Код
#pragma vector=ADC_VECTOR
#pragma type_attribute=__interrupt
void ADC12_ISR(void)
{
...
}
Kurt
Пример из того же guide c возможностью отката на старую версию:
Код
#if __VER__ < 200
interrupt [ VECTOR ] void my_function( void )
#else
#pragma vector=VECTOR
__interrupt void my_function( void )
#endif
{
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.