Witam,
czy może ktoś mi w jakiś może nawet w trochę łopatologiczny sposób podpowiedzieć jaka jest zasada (o ile da się to krótko opisać?) jeśli chodzi o sposoby includowania plików tak żeby wciąż nie występowały błędy podczas kompilacji n/t powtórnych deklaracji itp itp.
powiem co do tej pory wiem a czego nie to może uda się to jakoś uładzić?
otóż napisałem sobie np plik "makra_mk.h"
już nie istotna jego zawartość, ale..... wprawdzie dałem na początku jak widać takie coś jak:
choć przyznam, że tego za bardzo jeszcze nie rozumiem - ale gdzieś tam było coś takiego
piszę też sobie np jakąś swoją obsługę do uart'a i tworzę plik .c w którym wiadomo - deklaruję jakieś zmienne w tym volatile, deklaruję funkcję uart_init(); a także procedury obsługi stosownych przerwań do uart'a.
....... i teraz chciałbym w swoim głównym pliku projektu zainkludować to wszystko. Co robię tak np:
no i oczywiście za chwilę kompilator "płacze" że ooo jej nie ma żadnych definicji typów i w ogóle niczego jesli chodzi o plik uart_mk.c , więc .... pakuję do pliku uart_mk.c to:
no i już lepiej - nie krzyczy o to wszystko tylko jakby nie widział z kolei moich makr, więc dowalam mu jeszcze do mojego uart_mk.c:
no i znowu zaczyna się płacz kompilatora z kolei, że:
..... kurczę może ktoś obeznany dobrze z tym wszystkim udzieliłby początkującemu kilku wskazówek - czym się kierować chcąc unikać takich błędów, zapętleń jakby.... hmmm???? please
czy może ktoś mi w jakiś może nawet w trochę łopatologiczny sposób podpowiedzieć jaka jest zasada (o ile da się to krótko opisać?) jeśli chodzi o sposoby includowania plików tak żeby wciąż nie występowały błędy podczas kompilacji n/t powtórnych deklaracji itp itp.
powiem co do tej pory wiem a czego nie to może uda się to jakoś uładzić?
otóż napisałem sobie np plik "makra_mk.h"
#ifndef MAKRA_H_INCLUDED
#define MAKRA_H_INCLUDED
// Makra upraszczające dostęp do portów
// *** PORT
#define PORT(x) XPORT(x)
#define XPORT(x) (PORT##x)
// *** PIN
#define PIN(x) XPIN(x)
#define XPIN(x) (PIN##x)
// *** DDR
#define DDR(x) XDDR(x)
#define XDDR(x) (DDR##x)
// NOP
#define nop() {asm volatile("nop"::);}
#endif // MAKRA_H_INCLUDEDjuż nie istotna jego zawartość, ale..... wprawdzie dałem na początku jak widać takie coś jak:
#ifndef MAKRA_H_INCLUDED
#define MAKRA_H_INCLUDEDchoć przyznam, że tego za bardzo jeszcze nie rozumiem - ale gdzieś tam było coś takiego
piszę też sobie np jakąś swoją obsługę do uart'a i tworzę plik .c w którym wiadomo - deklaruję jakieś zmienne w tym volatile, deklaruję funkcję uart_init(); a także procedury obsługi stosownych przerwań do uart'a.
....... i teraz chciałbym w swoim głównym pliku projektu zainkludować to wszystko. Co robię tak np:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <inttypes.h>
#include <util/delay.h>
#include "makra_mk.h"
#include "uart_mk.c"
int main(void)
{
uart_init();
while(1);
}
no i oczywiście za chwilę kompilator "płacze" że ooo jej nie ma żadnych definicji typów i w ogóle niczego jesli chodzi o plik uart_mk.c , więc .... pakuję do pliku uart_mk.c to:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <inttypes.h>no i już lepiej - nie krzyczy o to wszystko tylko jakby nie widział z kolei moich makr, więc dowalam mu jeszcze do mojego uart_mk.c:
#include "makra_mk.h"no i znowu zaczyna się płacz kompilatora z kolei, że:
uart_mk.c:43: multiple definition of `uart_init'..... kurczę może ktoś obeznany dobrze z tym wszystkim udzieliłby początkującemu kilku wskazówek - czym się kierować chcąc unikać takich błędów, zapętleń jakby.... hmmm???? please
