Moin Moin,

ich würde gerne eigene Include-Dateien verwenden, um unter anderem meinen code etwas übersichtlicher zu machen. Leider habe ich das aber noch nicht hinbekommen... Ich verwende avr-gcc unter Linux. Die Artikel auf RN-Wissen und mikrocontroller.net haben mir auch nicht so richtig weitergeholfen, deswegen wende ich mich jetzt mal ans Forum.

Einbinden inder main.c Datei sieht so aus
Code:
#include "uart.h"
uart.h:
Code:
extern int uart_putc(unsigned char c);
extern void uart_puts (char *s);
extern void uart_init_9600(void);
uart.c
Code:
int uart_putc(unsigned char c)
{
    while (!(UCSRA & (1<<UDRE)));        //Warten auf Bereitschaft                             
    UDR = c;                    //Senden

    return 0;
}
void uart_puts (char *s)
{
    while (*s)                    //Durchlaufen des Strings bis zum Zeichen /0
    {
        uart_putc(*s);
        s++;
    }
}
void uart_init_9600(void)
{
  uint16_t bps_real;
  
  UCSRB |= (1 << TXEN)|(1 << RXEN)|(1 << RXCIE);
  UCSRC = (1<<URSEL)|(1 << UCSZ1)|(1 << UCSZ0); // Asynchron 8N1 

  bps_real = (F_CPU/(9600 * 16.0))-1;    //BdR für Timer umrechnen
  
  UBRRH = (bps_real >> 8);        //bps_real=(F_CPU/(16*BD))-1
  UBRRL = bps_real;            //Baudrate auf 9.600

}
Dabei entstehen mehrere solche Fehlermeldungen:
/home/Thomas/projects/ATmega16/UART/main.c:107: undefined reference to `uart_puts'
Also offensichtlich findet der Compiler die Funktionen nicht. Ich hab schon einiges mit der Makfile ausprobiert kenne mich damit aber nicht so richtig aus. An welcher Stelle muss man denn den Pfad angeben? Oder muss man den Pfad gar nicht angeben, wenn alle Dateien in dem selben Verzeichnis liegen? An welcher Stelle beim Kompiliervorgang werden die Libs denn dann kompiliert?
Und muss ich eigentlich wenn die include Datei auf weitere Libs zurückgreift diese auch nochmal in der include-Datei includen?

Also ich bin etwas verwirrt, wie man vielleicht an den fragen merkt und hoffe, dass ihr mir weiterhelfen könnt