Skocz do zawartości

Program składający się z kilku plików/ problem z #include


nes86

Pomocna odpowiedź

Mam taki problem, że nie mogę skompilować programu składającego się z kilku plików. Wszystkie pliki mam połączone za pomocą dyrektywy preprocesora #include, a podczas próby kompilacji wyskakuje taki błąd:

gcc plug-in: Error: Object file not found on expected location F:\Projekty AVR\SaperV2\default\SaperV2.elf

Z tego co wyczytałem na wygooglanych forach to problem leży właśnie w łączeniu plików. Gdy połączyłem wszystkie pliki w jeden to program się skompilował. Będę wdzięczny jeśli komuś zechce się zerknąć na ten projekt i powiedzieć mi jak połączyć te pliki aby się skompilowało.

W załącznikach są spakowane dwa projekty do AVRStudio(w języku C). Jeden w wersji jedno plikowej działającej i drugi nie działający. Jest to program do robota nano-sumo ale jeszcze nie skończony.

Tescik.rar

SaperV2.rar

Link do komentarza
Share on other sites

Witam.

Brakuje plików nagłówkowych.

Powinieneś zrobić coś takiego:

dla wszystkich plików *.c dorobić pliki nagłówkowe *.h o tej samej nazwie

pliki te muszą zawierać tylko deklaracje funkcji. Wygląda to tak:

// plik funkcje.h
void funkcja1(void); 
uint8_t funkcja2(void); 
// plik funkcje.c
#include "funkcje.h" 
uint8_t funkcja0(uint8_t zmienna) 
{ 
  ciało funkcji
} 

void funkcja1(void) 
{ 
  ciało funkcji
} 

uint8_t funkcja2(void) 
{ 
  ciało funkcji
} 

Mając tak przygotowane plik źródłowy i nagłówkowy poleceniem include dołączasz plik h

UWAGA

Proszę zauważyć, że w nagłówku jest o jedną funkcję mniej niż w pliku c

To nie jest błąd, po prostu funkcja o nazwie funkcja0 może być wywoływana TYLKO przez inne funkcje znajdujące się w pliku funkcje.c.

Wszystkie funkcje zawarte w nagłówku mogą być natomiast wykorzystane w pliku, w którym plik nagłówkowy został dodany dyrektywą include.

Więcej informacji w książkach co C, internecie i kursie AVR GCC publikowanym w EP.

P.S.

Aby uniknąć wielokrotnego dodawania plików proponuję użyć czegoś takiego we wszystkich plikach:

#ifndef _MAIN_MOD_
#define _MAIN_MOD_

// zawartość pliku głównego projektu
#endif /* _MAIN_MOD_ */

POWODZENIA

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.