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

 
 
> Помогите разобраться с typedef в Codevision AVR 2.xx, Как избавиться от назойливых предупреждений?
Halfback
сообщение Feb 7 2009, 15:30
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 322
Регистрация: 28-05-05
Пользователь №: 5 512



Смысл в том что в проекте создаю заголовочный файл types.h с содержимым:
Код
typedef unsigned char   uint8;
typedef unsigned short int uint16;
typedef unsigned long   uint32;


Дальше всё делаю как полагается: создаю , например spi.с и для него spi.h в котором перечисляю прототипы:
Код
#include <90usb162.h>
#include <types.h>

void SPI_Init();
void SPI_Tx_2BITE(uint16 data);
interrupt [SPI_STC] void spi_isr(void);


В spi.c начинаю с
Код
#include "spi.h"

void SPI_Init() { // Функция инициализации SPI
        //........
        };

        
void SPI_Tx_2BITE(uint16 data) {
        //........
        };

interrupt [SPI_STC] void spi_isr(void) {

               };


Дык посл компиляции проекта выдаются предупреждения
Код
Warning: F:\...\types.h(2), included from: spi.h: typedef name has already been declared with the same type
Warning: F:\...\types.h(4), included from: spi.h: typedef name has already been declared with the same type
Warning: F:\...\types.h(6), included from: spi.h: typedef name has already been declared with the same type


Причём показывает на types.h с его тремя typedef-ами. Почему так - вроде понятно. Но разве компилятор настолько не умный чтобы не хавать идентичный typedef ??? Или может я что-то не так делаю?
Если кому не лень разьясните пожалуйста!!!

До этого момента делать небольшие проекты в кейле но там таких глупостей небыло!!!

Сообщение отредактировал Halfback - Feb 7 2009, 15:40
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
SlavaG
сообщение Feb 7 2009, 15:44
Сообщение #2





Группа: Участник
Сообщений: 11
Регистрация: 14-07-06
Из: Кишинёв
Пользователь №: 18 825



Необходимо исключить повторное включение *.h файлов,
в начале файла xxx.h добавь например это:
#ifndef XXX_H
#define XXX_H

в конце файла xxx.h добавь:
#endif

или можно в начале *.h файлов добавить строку:
#pragma once
но не уверен воспримет ли это codevision

Сообщение отредактировал SlavaG - Feb 7 2009, 15:48
Go to the top of the page
 
+Quote Post
Halfback
сообщение Feb 7 2009, 17:11
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 322
Регистрация: 28-05-05
Пользователь №: 5 512



#pragma once - такую директиву по моим данным CAVR не поддерживает.

в spi.h для примера добавил как подсказали в вот что получилось
Код
#include <90usb162.h>
#ifndef types_h
#define types_h
#endif

        
void SPI_Init();
interrupt [SPI_STC] void spi_isr(void); // Обработчик прерывания по приходу байта
void SPI_Tx_2BITE(uint16 data);

и в итоге types.h не инклудился, т.к. компилятор эррорит что не понимат uint16.

#endif в конец заголовочного файла не поставить - сразу ошибка.

Какие будут еще соображения?

Сообщение отредактировал Halfback - Feb 7 2009, 17:13
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 7 2009, 17:19
Сообщение #4


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Код
#include <90usb162.h>
#ifndef types_h
#define types_h        
void SPI_Init();
interrupt [SPI_STC] void spi_isr(void); // Обработчик прерывания по приходу байта
void SPI_Tx_2BITE(uint16 data);

#endif



Теперь должно быть нормально. По поводу #pragma once - это моветон. smile.gif
ЗЫ: на всякий случай, вдруг Вы невнимательно читаете - я перенес #endif в конец файла
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 7 2009, 17:19
Сообщение #5


Гуру
******

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



Это нужно написать в начале types.h:
Код
#ifndef types_h
#define types_h


Это - в конце:
Код
#endif
Go to the top of the page
 
+Quote Post
Halfback
сообщение Feb 7 2009, 17:29
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 322
Регистрация: 28-05-05
Пользователь №: 5 512



Pasha
я внимательно читаю smile.gif
тупо тока что скопировал в spi.h код (закомментировав свой)
Код
#include <90usb162.h>
#ifndef types_h
#define types_h        
void SPI_Init();
interrupt [SPI_STC] void spi_isr(void); // Обработчик прерывания по приходу байта
void SPI_Tx_2BITE(uint16 data);

#endif


не фурычит. Причем #endif в КОНЦЕ синтаксис не засвечивает почему-то (может глюк? wacko.gif ).

aaarrr
Спасибо!!! Теперь не выдаёт предупреждений!!! Действительно в types.h прописать надо было!

Сообщение отредактировал Halfback - Feb 7 2009, 17:42
Go to the top of the page
 
+Quote Post

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

 


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


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