Forum: Mikrocontroller und Digitale Elektronik Implicit declaration of function.


von Sucher (Gast)


Lesenswert?

Hallo,
ich brauche mal ein paar mehr Augen. Ich bin dabei mir eine Bib für den 
HD44780 zu schreiben. Das klappt soweit ganz gut, nur ein kleines 
Problem taucht auf:
Error    implicit declaration of function 'lcd_command' 
[-Werror=implicit-function-declaration]         61
Message    previous implicit declaration of 'lcd_command' was here 
61
Warning    no previous prototype for 'lcd_command' 
[-Wmissing-prototypes]  131

Vielleicht ist es banal aber ich steh hier scheinbar auf dem Schlauch. 
Normalerweise sagt das doch aus, dass die Funktion vor ihrem Aufruf 
nicht bekannt ist. Ich habe sie aber im headerfile bekannt gemacht. 
Warum kappiert der das nicht? Wo steckt denn hier der Fehler?

1
#ifndef HD44780_H_
2
#define HD44780_H_
3
4
5
void lcd_init(void);                    //Initialisieren
6
void lcd_clear(void);                    //Displayinhalt löschen
7
void lcd_entry(bool increment, bool shift);          //Eingabemodus einstellen (increment - rückt nach eingabe ein Zeichen weiter; shift - dynamischer Text)
8
void lcd_display(bool display, bool cursor, bool blink);  //Displaymodus einstellen (display - schaltet Display an und aus; curser - zeigt den Cursor; blink - Cursorblinken)
9
void lcd_enable(void);                    //Anliegende Daten senden
10
void lcd_write(char x);                    //Ein Zeichen senden
11
void lcd_command(uint8_t command);                //Befehl geben
12
void lcd_text(char text[]);                  //Einen Text senden
13
void lcd_set_cursor(int zeile, int zeichen);        //Curserposition setzen
14
15
16
#endif /* HD44780_H_ */

HD44780.c
1
#include <asf.h>
2
#include <avr/io.h>
3
#include <header.h>
4
#include <util/delay.h>
5
#include <HD44780.h>
6
7
...
8
9
void lcd_clear(void){
10
  lcd_command(0x01);         //Zeile 61
11
}
12
13
...
14
15
void lcd_command(uint8_t command){       //Zeile 131
16
...
17
}
18
19
...

von $NAME (Gast)


Lesenswert?

Wo liegt deine lib? <> ist für library Pfade. Wenn die .h im gleichen 
Ordner liegt, nimm "".
1
#include "HD44780.h"

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

$NAME schrieb:
> Wo liegt deine lib?

Es ist keine. Aber das ist nicht das Problem des Threadstarters - der 
Compiler würde sich beschweren, wenn er eine angegebene Headerdatei 
nicht finden kann.

Die Meldung "implicit declaration" wird aber nicht beim Übersetzen des 
geposteten Sourcecodes ausgegeben, sondern beim Übersetzen des /nicht 
gezeigten/ Sourcecodes, der versucht, die Funktionen aufzurufen. Und 
da wird die Headerdatei schlichtweg nicht eingebunden sein.

von Sucher (Gast)


Lesenswert?

Vielen Dank so gehts.
Ich habe aber auch einen header.h für mein mainfile und das include ich 
genauso mit <> und da gehts komischerweise obwohl es genauso im gleichen 
Ordner liegt...
Und auch die asf.h liegt ja im gleichen Ordner.
Irgendwie erkenne ich den Sinn dahinter nicht.

von $NAME (Gast)


Lesenswert?

Sucher schrieb:
> Vielen Dank so gehts.
> Ich habe aber auch einen header.h für mein mainfile und das include ich
> genauso mit <> und da gehts komischerweise obwohl es genauso im gleichen
> Ordner liegt...
> Und auch die asf.h liegt ja im gleichen Ordner.
> Irgendwie erkenne ich den Sinn dahinter nicht.

https://www.mikrocontroller.net/articles/Include-Files_%28C%29

Hängt also davon ab was du als Include Pfad definierst (Beim GCC sind 
das die -I parameter).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.