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

 
 
> Использование CMSIS (C) и scmRTOS (C++), Вопрос начинающего в C++
Alekseeey
сообщение Jan 18 2011, 09:55
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 21-09-10
Пользователь №: 59 626



Здравствуйте.

Ситуация такая:
Есть желание использовать совместно в одном проекте scmRTOS и CMSIS для Cortex M3.
scmRTOS написана на C++.
Библиотека CMSIS написана на С. В этой библиотеке используются анонимные структуры, например:

/*------------- General Purpose Input/Output (GPIO) --------------------------*/
/** @brief General Purpose Input/Output (GPIO) register structure definition */
typedef struct
{
union {
__IO uint32_t FIODIR;
struct {
__IO uint16_t FIODIRL;
__IO uint16_t FIODIRH;
};
struct {
__IO uint8_t FIODIR0;
__IO uint8_t FIODIR1;
__IO uint8_t FIODIR2;
__IO uint8_t FIODIR3;
};
};
...
} LPC_GPIO_TypeDef;


Анонимные структуры запрещены в C++, при компиляции вылезает куча предупреждений: "warning: ISO C++ prohibits anonymous structs [-pedantic]".
В исходниках CMSIS, конечно, есть развязки:

#if defined ( __CC_ARM )
#pragma anon_unions
#endif

Но компилятор игнорирует прагму: "warning: ignoring #pragma anon_unions [-Wunknown-pragmas]".

Как мне заставить проект компилироваться корректно, не меняя исходников CMSIS?

Использую:
Eclipse
GCC toolchain от человека с ником Klen
make от человека с ником АНТОХА
scmRTOS (3.10)
CMSIS (lpc1768 release 26 July 2010)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Alekseeey
сообщение Jan 18 2011, 22:10
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 21-09-10
Пользователь №: 59 626



Цитата
И приходится же просматривать - не упустить бы чего серьёзного.


Верно.


Сейчас поставил другой тулчейн -- codesourcery.

Проект сделал тестовый (main.cpp), без scmRTOS, зато с CMSIS и анонимными структурами.

В настройках проекта выставлено Language Standard = ISO C90 with GNU extensions. (C/C++Build -> Settings -> Miscellaneous)

Предупреждений не возникает.

Фрагмент консоли с компиляцией (не для себя, для искушенных):
'Building file: ../src/lpc17xx_gpio.c'
'Invoking: ARM Sourcery Windows GCC C Compiler'
arm-none-eabi-gcc -O0 -Wall -Wa,-adhlns="src/lpc17xx_gpio.o.lst" -c -fmessage-length=0 -MMD -MP -MF"src/lpc17xx_gpio.d" -MT"src/lpc17xx_gpio.d" -mcpu=cortex-m3 -mthumb -o"src/lpc17xx_gpio.o" "../src/lpc17xx_gpio.c"
'Finished building: ../src/lpc17xx_gpio.c'
' '

Если же выставить ISO C99 (-std=c99), то возникает множество предупреждений на анонимные структуры: "Declaration does not declare anything" и еще возникают ошибки там, где к этим структурам обращается программа.

Вот кусок консольного вывода:
arm-none-eabi-gcc -O0 -Wall -std=c99 -Wa,-adhlns="src/lpc17xx_gpio.o.lst" -c -fmessage-length=0 -MMD -MP -MF"src/lpc17xx_gpio.d" -MT"src/lpc17xx_gpio.d" -mcpu=cortex-m3 -mthumb -o"src/lpc17xx_gpio.o" "../src/lpc17xx_gpio.c"
In file included from ../src/lpc17xx_gpio.h:31:0,
from ../src/lpc17xx_gpio.c:26:
../src/LPC17xx.h:200:6: warning: declaration does not declare anything


Вобщем, должен быть способ отключить вывод избранных предупреждений. Не могу сообразить какой.
Go to the top of the page
 
+Quote Post



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

 


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


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