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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.