|
port definition for IAR C++, компилятор выдает предупреждения |
|
|
|
May 27 2006, 14:31
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Всем доброго времени суток!
Для написания программ для AVR всегда пользовал язык С, хотя С++ знаю, но как то применял для МК, на Си было попроще. Сейчас встала необходимость применять С++ ...В принципе, все компилируется и работает, но линкер сыпет предупреждениями типа:
Warning[w35]: There is more than one definition for the struct/union type with tag '__C1'; class/struct/union field names do not match: UCSRA_Bit0 vs DDRC_Bit0 struct __C1 /* Elements: 8, Bytes: 1 */ { unsigned char UCSRA_Bit0 : 1 /* disp: 0 */; unsigned char UCSRA_Bit1 : 1 /* disp: 1 */; unsigned char UCSRA_Bit2 : 1 /* disp: 2 */; unsigned char UCSRA_Bit3 : 1 /* disp: 3 */; unsigned char UCSRA_Bit4 : 1 /* disp: 4 */; unsigned char UCSRA_Bit5 : 1 /* disp: 5 */; unsigned char UCSRA_Bit6 : 1 /* disp: 6 */; unsigned char UCSRA_Bit7 : 1 /* disp: 7 */; };
etc.
Я понимаю так, что определения бит одного порта, используемого мною, перекрывают определения бит другого порта, который я тоже использую в своей программе. Как избавиться от этих предупреждений? Я привык составлять прогрмму так, что бы не было никаких предупреждений)))...
Спасибо.
--------------------
|
|
|
|
|
 |
Ответов
|
May 27 2006, 14:48
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
приведен неполный код. То что вы привели по идее не должно быть причиной warning'a. Ну и почему бы не воспользоваться typedef struct..., определить структуру с разбивкой на биты B0..B7, и пользоваться этим типом там где это требуется. пример: Код typedef struct /* Elements: 8, Bytes: 1 */ { unsigned char B0 : 1, B1 : 1, B2 : 1, B3 : 1, B4 : 1, B5 : 1, B6 : 1, B7 : 1; } TMyStruct;
volatile static __no_init TMyStruct DDRA @ 0x1A; volatile static __no_init TMyStruct UCSRA @ 0x0B; ...
|
|
|
|
|
May 27 2006, 15:21
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(defunct @ May 27 2006, 22:48)  приведен неполный код. То что вы привели по идее не должно быть причиной warning'a.
Ну и почему бы не воспользоваться typedef struct..., определить структуру с разбивкой на биты B0..B7, и пользоваться этим типом там где это требуется. По поводу кода: я попытался переделать на С++ драйвер USART который я выложил в http://electronix.ru/forum/index.php?showtopic=10934# Он чуть вышего Вашего программного USART. Так вот, когда я переправил в глобальных опциях проекта CLIB на Normal DLIB (Full DLIB/ Custom DLIB), и откомпилировал проект, не написав еще ни единого класса, у меня пошли Warning-и. Так что код можете посмотреть. При CLIB ни каких предупреждений не было((( >Re:Ну и почему бы не воспользоваться typedef struct... Не хочется нагромождать код лишними конструкциями, так хуже воспринимается) К тому же я думаю есть более простой путь, может быть какой то хедер подключить? Попутно еще вопрос, пусть даже на примере моего драйвера - как мне встроить в класс (допустим USART-а) прерывания. Ведь в прерывание я не смогу передать параметр, а функции класса всегда получают хотя бы один параметр - указатель класса. Делать для этого в модуле глобальную переменную -указатель? Или есть еще каки нибудь методы?
--------------------
|
|
|
|
|
May 27 2006, 15:41
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(prottoss @ May 27 2006, 18:21)  По поводу кода: я попытался переделать на С++ драйвер USART который я выложил в http://electronix.ru/forum/index.php?showtopic=10934... Так вот, когда я переправил в глобальных опциях проекта CLIB на Normal DLIB (Full DLIB/ Custom DLIB), и откомпилировал проект, не написав еще ни единого класса, у меня пошли Warning-и. Так что код можете посмотреть. При CLIB ни каких предупреждений не было((( Весьма странно. Откомпилировал Ваш проект как есть с Normal DLIB (embedded C++), единственный Warning: Warning[Pe951]: return type of function "main" must be "int" C:\ATMEL\IAR\Prottoss\main.c 16 Цитата Попутно еще вопрос, пусть даже на примере моего драйвера - как мне встроить в класс (допустим USART-а) прерывания. Ведь в прерывание я не смогу передать параметр, а функции класса всегда получают хотя бы один параметр - указатель класса. Делать для этого в модуле глобальную переменную -указатель? Или есть еще каки нибудь методы? Сделать метод класса обработчиком прерывания - нельзя. Но можно объявить экземпляр класса (вашего драйвера) так, чтобы он попадал в область видимости функции обработчика прерывания, т.о. внутри функции обработчка прерывания можно будет вызывать методы конкретного экземпляра этого класса.
|
|
|
|
Сообщений в этой теме
prottoss port definition for IAR C++ May 27 2006, 14:31     prottoss Цитата(Сергей Борщ @ May 28 2006, 00:05) ... May 27 2006, 16:21 sensor_ua Это должно быть то же, что
#include <ioavr.h... May 27 2006, 16:46 prottoss реплика не в тему созданную мной, но дабы не заним... May 27 2006, 17:35 defunct Цитата(prottoss @ May 27 2006, 20:35) В и... May 27 2006, 19:07  prottoss Цитата(defunct @ May 28 2006, 03:07) Увы ... May 28 2006, 07:30
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|