| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| RQ:AVR,GCC:"Error:multiple definition..." &ДРУ http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=8718 |
Страница 1 от 1 |
| Автор: | NikB [ Съб Мар 19, 2011 4:31 pm ] | |||
| Заглавие: | RQ:AVR,GCC:"Error:multiple definition..." &ДРУ | |||
RQ: AVR, GCC: "Error: multiple definition of blabla" Правя проект, добавям C и H файл и на всяка дефиниця в H файла ми дава тая грешка (но я пoказва, че е в O файла) Що я дава тая грешка? Какво не съм направил както трябва? Направих отделен проект да го пробвам. Ако махна моите файлове и добавя други C и H файлове - няма проблем И трите файла са на картинката тука. Поствам и прикрепен проект (най-долу).
|
||||
| Автор: | ps66 [ Съб Мар 19, 2011 4:46 pm ] |
| Заглавие: | |
какво има да се чудиш - това явно е грешка на линкера - всеки път като включиш H в някой C - дефинираш тая променлива много тъп начин на дефиниране си избрал (не ти е виновен компилатора/линкера!) |
|
| Автор: | CarBeta [ Съб Мар 19, 2011 4:53 pm ] |
| Заглавие: | |
махни #include "EncodePho.h" от единия *.с файл |
|
| Автор: | tolstolob [ Съб Мар 19, 2011 5:01 pm ] | ||||||||||||||||||
| Заглавие: | Поне една читава книжка за С нямаш ли? | ||||||||||||||||||
EncodePho.h:
EncodePho.c:
Всичко в хедърите трябва да е extern. Темата е дъвкана поне 100 пъти! |
|||||||||||||||||||
| Автор: | NikB [ Съб Мар 19, 2011 5:07 pm ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
Благодаря, но 1. Има #ifndef ENCODEPHO_H_ #define ENCODEPHO_H_ ... #endif /* ENCODEPHO_H_ */ 2. По същия начин са дефинирани и lcd_lib.c и lcd_lib.h, а не дават грешки, като ги добавя ползвам в проекта.
A по-острият начин какъв е? |
|||||||||||||||||||
| Автор: | NikB [ Съб Мар 19, 2011 5:13 pm ] | |||||||||
| Заглавие: | Re: Поне една читава книжка за С нямаш ли? | |||||||||
Благодаря! Имам маса книжки, не зная кое е съществено Даже МНОГО благодаря |
||||||||||
| Автор: | ps66 [ Съб Мар 19, 2011 5:51 pm ] | |||||||||||||||||||||||||||
| Заглавие: | ||||||||||||||||||||||||||||
дефинициите като - ENCODEPHO_H_ не са глобални ! по-острите начини са ти ги написали по-горе ! |
||||||||||||||||||||||||||||
| Автор: | NikB [ Съб Мар 19, 2011 6:11 pm ] | |||||||||
| Заглавие: | Още нещо (по темата) да питам | |||||||||
Благодаря ти, но какъв е смисъла от тях тогава? Да ограничават да не се дублират include в един файл? --------------------- Още нещо (по темата) да питам, относно Къде, в H или в C файла или на двете места да сложа volatile (не желая да се опитва да оптимизира, преди да съм изчел подробно за оптимизации (както е указано по-горе: в H: extern uint8_t enphDDE[]; в C: uint8_t enphDDE[4] = {DDE4, DDE5, .... }; ) |
||||||||||
| Автор: | tolstolob [ Съб Мар 19, 2011 6:25 pm ] |
| Заглавие: | |
На двете места. |
|
| Автор: | NikB [ Съб Мар 19, 2011 8:42 pm ] | |||||||||
| Заглавие: | ||||||||||
|
||||||||||
| Автор: | NikB [ Съб Мар 19, 2011 8:42 pm ] |
| Заглавие: | iom128.h - къде и кога се дефинира и т.н. |
Да продължа с питанките, който ги няма (или трудно се намират) в книгите: iom128.h - къде и кога се дефинира и т.н.: Постановка на задачата: GCC с Avr studio 5 (едва ли в тая част има разлика с 4) Изтеглих един проект от мрежата, но не е означен процесорът. Избрах си Atmega128. Имаше две предупреждения "appears to be a misspelled signal handler" (за SIG_USART_DATA и за SIG_USART_RECV). Напсувах ги и видях, че в iom128.h тия вектори са декларирани по три начина. С USART0_UDRE_vect и USART0_RX_vect предупрежденията се оправиха Като щтракна на USART0_UDRE_vect и избера "find definition" ми се отваря iom128.h. Потърсих (с "Find in solution") къде в проекта ми е деклариран iom128.h и не го намерих. И ПИТАНКАТА Как компилаторът и линкерът стигат до това чудо iom128.h и ИМА ЛИ НАЧИН като търся с "Find..." да търся в същите файлове, до които има връзка проекта ми? |
|
| Автор: | Cino [ Съб Мар 19, 2011 9:04 pm ] |
| Заглавие: | |
трябва да инклуднеш в проекта си фаила <io.h> #include <io.h> който се намира примерно в "C:\WinAVR-20100110\avr\include\avr" да зададеш на авр студиото къде да си търси инклуде директорията. да зададеш в configuration options на проекта кой контролер ползваш тогава компилатора си дефинира дефиниция указваща типа на контролера примерно "__AVR_ATmega128__", и от този файл io.h, си инклудва съответния IO файл за контролера който ползваш. от същата тази папка примерно "iom128.h" EDIT: а можеш да търсиш в файловете като ги инклуднеш в дървото на проекта , в AVR Studio, и след това компилираш така само ако са инкулуднати като фаилове не търси в тях наистина |
|
| Автор: | NikB [ Съб Мар 19, 2011 9:10 pm ] | |||||||||
| Заглавие: | ||||||||||
Да, така съм го направил (при създаване на проекта съм указал девайс). Иначе нямаше да ми покаже, че взема векторите от iom128.h. Но не разбирам как това отговаря на въпросите ми ПП Пардон - отговаря на първия въпрос, значи не ми е ясен само отговора на втория въпрос И не е ясно защо за някои от начина на дефиниране на векторите в iom128.h стават предупреждения. |
||||||||||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|