AVR Butterfly ATmega169 - Probleme mit Include Dateien der vorinstallierten Software

OP (Firma: Student) #1474154
Hallo Leute,

ich bin ein blutiger Anfänger was die Programmierung von µC's angeht, 
von daher bitte ich schon jetzt um Entschuldigung für vielleicht stupide 
Fragen.

Mein Problem: Ich möchte ein Programm schreiben, welches die 
vorgefertigten Include-Datein der AVR Butterfly Software verwenden soll, 
speziell geht es dabei um die ADC.h; Button.h; LCD_functions.h usw. Wenn 
ich mir nun die .h und die .c Datein aus dem ursprünglichen Verzeichnis 
in meinen "neuen Programmordner" Ordner kopiere und anschließend mein 
Programm mit "Make All" oder "Extcoff" kompilieren möchte kommen stets 
viele Fehlermeldungen. siehe hier:

C:\Dokumente und Einstellungen\Heinke\Desktop\Neuer 
Ordner/Termnal.c:328: undefined reference to `LCD_puts'
C:\Dokumente und Einstellungen\Heinke\Desktop\Neuer 
Ordner/Termnal.c:333: undefined reference to `LCD_puts' 
..................usw.

Kann mir da jmd helfen? Habe mich heute den ganzen Nachmittag damit 
befasst. Wie kann ich die Include Dateien für mich nutzen??

Bin für jede Antwort dankbar.
Ich wünsche euch noch einen schönen Samstag Abend.
#1474220
Du suchst mit den Include-Dateien am falschen Ende.  Was Dir fehlt, ist 
der Code für LCD_puts.

Wohlerzogene Include-Dateien tragen nur Informationen bei, die für den 
momentanen Übersetzungsvorgang wichtig sind (z.B. die Information, dass 
es woanders einen LCD_puts() gibt, welche Parameter das erwartet und was 
es zurückgibt).  Damit hast Du aber noch kein LCD_puts(), das musst Du 
noch liefern.

Das tust Du, indem Du das *.c-File, das den Code für LCD_puts() enthält, 
als weitere Quelldatei angibst.
OP (Firma: Student) #1474262
Vielen Dank für deine Antwort nur leider weiß ich noch nicht ganz was du 
meinst. Wäre wirklich nett wenn du mir das noch ein bisschen näher 
erläutern könntest. Zur Untestützung hier mal mein Quelltext. Kurz 
vorweg: mein Programm soll zunächst noch nichts ausführen, ich wollte 
damit lediglich die Funktionalität der Include Dateien prüfen:

Programm: "Belüftung.c"
1
 
2
#include <avr/io.h>
3
#include "LCD_functions.h"
4
#include "LCD_driver.h"
5
#include "button.h"
6

7
int main()
8
{
9
}

Die Dateien befinden sich alle im selben Verzeichnis wie mein Programm. 
Ich hatte ja vermutet, dass es etwas damit zu tun hat das diese Include 
Datein aufeinander aufbauen bzw sich aufeinander beziehen.
OP (Firma: Student) #1474267
Noch ein kleiner Nachtrag, ich denke ich habe soeben verstanden was du 
mir sagen wolltest. Allerdings denke ich ist das nicht der Punkt. Die 
Funktion LCD_puts() verwende ich ja gar nicht in meinem Quelltext. Diese 
Funktion ist in der Datei "LCD_functions.c" enthalten und wird dort 
beschrieben, es reicht doch aber aus nur die "LCD_functions.h" 
einzufügen oder nicht? Wo ist eigentlich der Unterschied zwischen diesen 
beiden Dateien?
OP (Firma: Student) #1474383
Nein hatte ich nicht, allerdings liegts daran auch nicht habe es 
ausprobiert. Die *.c Files müssten laut "Makefile_Template" automatisch 
eingefügt werden.
Habe jetzt so ziemlich viel ausprobiert und nix klappt, habe keine 
Ahnung mehr woran das liegen kann. Ich glaub das ist jetzt der richtige 
Zeitpunkt für'n Bier. ;)
#1474548
Vielleicht können wir die Umgebung erst mal klären:

- Du verwendest WinAVR?

- Mit Makefile oder der Projekt-Arbeitsumgebung von AVR Studio?

- Woher stammt die Datei Termnal.c, in der LCD_puts() aufgerufen wird?

- Wieso ist die Teil des zu übersetzenden Programms, wenn Du sagst, 
LCD_puts() würde von Dir nie aufgerufen?

Vielleicht kommen wir so der Sache näher.
OP (Firma: Student) #1474691
Also ich verwende WinAVR und schreibe dann meinen Quellcode mit Notepad 
2 und kompiliere dann, nachdem ich mir eine Makefile erzeugt habe mit 
"Make All". Die Datei Termnal.c ist ein selbstgeschriebenes Programm, 
dass ich von meinem Vorgänger übernommen habe. Bitte entschuldigt, ich 
bin vor lauter rumprobieren selbst durcheinander gekommen. Die 
Fehlermeldungen, die oben zu sehen sind treten auf wenn ich versuche 
dieses Termnal.c zu kompilieren. Es sind eigentlich alle wichtigen 
Include Dateien vorhanden und auch im selben Verzeichnis.

@Hazeh: Könnte ich Dir den Quelltext vielleicht einmal schicken (samt 
Include Datein)??
#1474727
nochmal:
Diese Fehlermeldung hat nichts mit dem Include File an sich zu tun.
Beim Zusammenbau des vollständigen Programs beschwert sich der Linker, 
dass er die Implementierung für LCD_puts nicht finden kann (eine 
Funktion die in terminal.c verwendet wird). Die Implementierung der 
LCD_puts ist aber gar nicht in lcd.h enthalten. Dort ist nur die 
Beschreibung drinnen, dass es eine derartige Funltion gibt. Irgendwo 
wird es noch eine Datei lcd.c geben. Die enthält die tatsächliche 
Implementierung und muss mit ins Makefile
#1475011
> @Hazeh: Könnte ich Dir den Quelltext vielleicht einmal schicken (samt
> Include Datein)??

Das wird nicht nötig sein.  Wenn Du Dir den Quelltext 'Termnal.c' 
anschaust, wirst Du feststellen, dass er in Zeile 328 und 333 LCD_puts() 
aufruft.  Also musst Du irgendwo den Quellcode für LCD_puts() auch 
liefern.  Geh' mal auf die Suche.  Du wirst es nicht finden, jedenfalls 
nicht unter den Quelltexten, die Du im Makefile benannt hast. 
Möglicherweise wird es irgendwo unter den Projektdateien sein, aber halt 
nicht unter denen, die Du dort (im Makefile) angegeben hast.

Zu den Include-Dateien kann ich Dir nur nochmal ans Herz legen, was Karl 
heinz und ich dazu schon gesagt haben:  die enthalten üblicherweise 
nicht den ausführbaren Code, sondern nur Begleitinformationen für den 
Compiler.  Du musst unterscheiden zwischen einer Deklaration wie
1
void LCD_puts(char *text);
die gar nichts tut als dem Compiler mitzuteilen, wie LCD_puts() 
anzusprechen ist, und der Definition von LCD_puts:
1
void LCD_puts(char *text){
2
  // ... Ladung von Anweisungen, die LCD_puts() ausmachen ..
3
}
Die erste Form findet sich typischerweise in einem Include-File wieder, 
die zweite in einer *.c-Datei.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.