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

 
 
 
Reply to this topicStart new topic
> C++ в IAR MSP430
juvf
сообщение Apr 6 2010, 03:26
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Есть проект для msp430f149 написанный на СИ. Пишу новый модуль (файл с функциями) для этого проекта. Ну очень нужен на с++. Для нового файла установил опцию Embedded C++. При компиляции получаю ошибки
Код
Error[Pe040]: expected an identifier C:\Program Files\IAR Systems\Embedded Workbench 5.3 Evaluation\430\INC\DLIB\math.h 128
Error[Pe018]: expected a ")" C:\Program Files\IAR Systems\Embedded Workbench 5.3 Evaluation\430\INC\DLIB\math.h 128
Error[Pa002]: the type attribute "__intrinsic" is not allowed on this declaration C:\Program Files\IAR Systems\Embedded Workbench 5.3 Evaluation\430\INC\DLIB\math.h 128
Error[Pe040]: expected an identifier C:\Program Files\IAR Systems\Embedded Workbench 5.3 Evaluation\430\INC\DLIB\math.h 130
Error[Pe018]: expected a ")" C:\Program Files\IAR Systems\Embedded Workbench 5.3 Evaluation\430\INC\DLIB\math.h 130
Error[Pa002]: the type attribute "__intrinsic" is not allowed on this declaration C:\Program Files\IAR Systems\Embedded Workbench 5.3 Evaluation\430\INC\DLIB\math.h 130

...


вот кусок кода из math.h
Код
#ifdef __cplusplus
  __INTRINSIC double abs(double);             //строка 128
  __INTRINSIC double pow(double, int);
  __INTRINSIC float abs(float);                   //строка 130
....
  __INTRINSIC long double tanh(long double);
#endif /* __cplusplus */


т.е. asb() несколько раз объявлена и на неё ругается. Как это побороть можно?
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 6 2010, 04:20
Сообщение #2


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(juvf @ Apr 6 2010, 10:26) *
вот кусок кода из math.h
Код
#ifdef __cplusplus
  __INTRINSIC double abs(double);             //строка 128
  __INTRINSIC double pow(double, int);
  __INTRINSIC float abs(float);                   //строка 130
....
  __INTRINSIC long double tanh(long double);
#endif /* __cplusplus */


т.е. asb() несколько раз объявлена и на неё ругается. Как это побороть можно?

Вы серьезно думаете, что ошибка в IAR'овских либах? smile.gif Ошибка где-то в вашем коде. Покажите его (удалите все лишнее, оставьте только фрагмент, который приводит к ошибке)?

Что касается нескольких функций с именем abs, то следует вспомнить о такой фиче С++, как перегрузка имен функций.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
akostin
сообщение Apr 6 2010, 18:06
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 4-12-04
Пользователь №: 1 322



Используйте приведение типов при вызове функции abs().
Go to the top of the page
 
+Quote Post
juvf
сообщение Apr 8 2010, 03:07
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Ну проблему решил, и почему она возникла в таком виде - примерно понял. А проблему решил строчкой в срр файле #include <math.h>.
в cpp есть #include "main.h". а main - это уже сишный. в main.h есть #include <math.h> который, по видимому компилялся как сишный. а в си нет перегрузки функций.


но с++ так и не прикрутил, есть еще проблема - но это уже другая тема.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 17:01
Рейтинг@Mail.ru


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