Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите разобраться с typedef в Codevision AVR 2.xx
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Halfback
Смысл в том что в проекте создаю заголовочный файл 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 ??? Или может я что-то не так делаю?
Если кому не лень разьясните пожалуйста!!!

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

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

или можно в начале *.h файлов добавить строку:
#pragma once
но не уверен воспримет ли это codevision
Halfback
#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 в конец заголовочного файла не поставить - сразу ошибка.

Какие будут еще соображения?
_Pasha
Код
#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 в конец файла
aaarrr
Это нужно написать в начале types.h:
Код
#ifndef types_h
#define types_h


Это - в конце:
Код
#endif
Halfback
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 прописать надо было!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.