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

 
 
 
Reply to this topicStart new topic
> Помогите разобраться с прерыванием в ИАРе, Компилятор ругается на идентификатор "vector"...
FREEKER
сообщение Jul 25 2007, 22:06
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 24-06-06
Пользователь №: 18 330



Помогите разобраться с таймером.
Компилятор ругается на эти строки (Конкретно на идентификатор "vector"... и всякие другие предупреждения):
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
Контроллер MSP430F169.
Может что то забыл подключить или указать?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 25 2007, 22:10
Сообщение #2


Гуру
******

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



Цитата(FREEKER @ Jul 26 2007, 01:06) *
Компилятор ругается на эти строки (Конкретно на идентификатор "vector"... и всякие другие предупреждения):
#include <msp430x16x.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
rezident
сообщение Jul 25 2007, 22:10
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(FREEKER @ Jul 26 2007, 04:06) *
Помогите разобраться с таймером.
Компилятор ругается на эти строки (Конкретно на идентификатор "vector"... и всякие другие предупреждения):
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
Контроллер MSP430F169.
Может что то забыл подключить или указать?

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

у вас в программе имеется?

Сообщение отредактировал rezident - Jul 26 2007, 16:06
Go to the top of the page
 
+Quote Post
FREEKER
сообщение Jul 26 2007, 07:29
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 24-06-06
Пользователь №: 18 330



#include <msp430x16x.h> конечно имеется.
Для проверки я взял пример из Slac069b/fet140_ta_01.c заменил на #include <msp430x16x.h>
Но ошибки все теже.
Есть особые разницы между 149 и 169? Раньше разницы не наблюдал.
Или с Workbench, чего случилось....
Go to the top of the page
 
+Quote Post
aag
сообщение Jul 26 2007, 08:30
Сообщение #5


Частый гость
**

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



попробуйте так:
Код
#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% рабочий (только что проверил)

Если будет продолжать ругаться, тогда остается один вопрос - какой у вас компилятор?

Сообщение отредактировал aag - Jul 26 2007, 08:31
Go to the top of the page
 
+Quote Post
NoName
сообщение Jul 26 2007, 09:38
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 4-03-05
Из: Киев
Пользователь №: 3 078



interrupt [ TIMERA0_VECTOR ] void TimerA( void ) {...} - в предыдущем поколении ИАР, только вот 169 они не поддерживали, или что то с настройками проекта, например под ИАР 3.30 что то подобное было, возможно помогло #pragma language=extended, точно не помню.

Сообщение отредактировал NoName - Jul 26 2007, 09:44
Go to the top of the page
 
+Quote Post
rezident
сообщение Jul 26 2007, 16:04
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(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)
{
....
}
Go to the top of the page
 
+Quote Post
FREEKER
сообщение Jul 27 2007, 06:24
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 24-06-06
Пользователь №: 18 330



Версия WorkBench 2.31E, все программы под ним делал. Есть версия 3.41a, но под ней не работаю, хотя наверно придётся перейти. Хидеры (14x, 16x) менял уже, результат один. Даже вытаскивал из 3.41 в 2.31 (для эксперимента), оказалось, они незаменяемые.
Скорее всего дело в версии. Всем Спасибо. Пойду пробовать код под разными версиями. Если не получится, выложу скриншоты.
Go to the top of the page
 
+Quote Post
FREEKER
сообщение Jul 27 2007, 13:55
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 24-06-06
Пользователь №: 18 330



Проблема в версии была. Заработало. smile.gif
Go to the top of the page
 
+Quote Post
rezident
сообщение Jul 27 2007, 15:12
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(FREEKER @ Jul 27 2007, 12:24) *
ВХидеры (14x, 16x) менял уже, результат один. Даже вытаскивал из 3.41 в 2.31 (для эксперимента), оказалось, они незаменяемые.

Кроме хидеров нужно еще и xcl-файлы копировать.
P.S. текущая версия ИАР ЕВ430 3.42E вроде бы, однако скачать дают только 3.42A.
Go to the top of the page
 
+Quote Post
FREEKER
сообщение Sep 12 2007, 19:42
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 24-06-06
Пользователь №: 18 330



Опять косяк..... Но наоборот теперь.
В новой версии IAR ругается на строку:
interrupt[ADC_VECTOR] void ADC12_ISR (void)
В старой работает.
Что забыл подключить?
Это есть: #include <msp430x16x.h>....
Просто перенёс прогу из 2.31 в 3.41.
Go to the top of the page
 
+Quote Post
rezident
сообщение Sep 12 2007, 20:49
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Вы видимо невнимательно прочитали документы 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)
{
...
}
Go to the top of the page
 
+Quote Post
Kurt
сообщение Sep 13 2007, 11:25
Сообщение #13


Участник
*

Группа: Свой
Сообщений: 63
Регистрация: 16-06-04
Из: Россия, Уфа
Пользователь №: 31



Пример из того же guide c возможностью отката на старую версию:
Код
#if __VER__ < 200
interrupt [ VECTOR ] void my_function( void )
#else
#pragma vector=VECTOR
__interrupt void my_function( void )
#endif
{
}
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 00:33
Рейтинг@Mail.ru


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