www.mikrocontroller.net

Forum: Compiler & IDEs Fehlermeldung bei "Build" für lcd-routines.c:


Autor: Viktor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Folgendes zu  Software:
Schreibe meine Programme mit AVR Studio 4.18 und verwende den C Compiler
WinAVR 20090313.
Ich habe gedacht schon Fertige Project testen.
Ich habe von 
http://www.mikrocontroller.net/articles/AVR-GCC-Tu... 
Dateien lcd-routines.h , lcd-routines.c runtergeladen.
Neues Projekt gemacht, alles einzurichten wie steht bei Beschreibung 
aber schon bei "Build" kommt Fehlermeldung; 
c:/winavr-20090313/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr51/cr 
tm128.o:(.init9+0x0):  undefined reference to `main'
make: *** [lcd-routines.elf] Error 1

Bei neues start AVR Studio nach Project Wizard/Recent projects/Load
in Fenster Message kommt ;
Loaded plugin AVR GCC
Loaded partfile: C:\Program Files\Atmel\AVR Tools\PartDescriptionFiles\
Error Code: -2147467259:

Wo liegt ein Fehler? Was habe ich falsch gemacht?
Wenn möglich, dann deutlich erzählen-wie für ein Einsteiger....

P.S. Bei anderen Projekten alles Einwanfrei funktioniren

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
- beim Namen von main vertippt
- die Datei mit main vergessen, ins Projekt aufzunehmen
- main ganz vergessen
- main und dain verwechselt

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Viktor,

stell doch einfach mal Dein ganzes Projekt hier rein.
Die beiden Dateien, die Du beschrieben hast, sind ja nur für die 
Ansteuerung des Displays zuständig. WAS aber geschickt wird (also welche 
Daten), dass musst Du ja noch bestimmen (und sowas läuft dann in einer 
von Dir zu erstellenden Datei, die eine main()-Funktion hat.
Also einfach die ganzen Dateien hier rein und dann schauen wir weiter.

Autor: I. E. (anfaenger69)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Victor,

Du hast die Datei main.c vergessen. Diese steht auf der Webseite weiter 
unten mit folgendem Text:

"Ein Hauptprogramm, welches die Funktionen benutzt, sieht zb. so aus:"

#include <avr/io.h>
#include "lcd-routines.h"

int main(void)
{
    lcd_init();

    lcd_data('T');
    lcd_data('e');
    lcd_data('s');
    lcd_data('t');

    set_cursor(0,2);

    lcd_string("Hello World!");

    while(1)
    {
    }

    return 0;
}

Autor: Viktor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke.
Jetzt habe ich bemärkt, das Datei lcd-routines.c: hat kein "int 
main(void)". Bitte erklären Sie , wie beide Dateien zusammenbinden.Daten 
von
main.c in Datei lcd-routines.c "eifach" kopieren? Wo in text? Weil soll 
nur ein Datei mit *.c in ein Project sein.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht mal ein C-Buch lesen?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist unter C üblich, Objekte einzeln zu compilieren und danach zu 
linken.
Dazu gibt es 3 Möglichkeiten:
- ein Make zu benutzen, in dem alle benötigten C-Files angegeben werden
- eine IDE zu benutzen und die C-Files dem Build hinzufügen
- dem Compiler per Wildcard "*.c" alle Files im aktuellen Verzeichnis zu 
übergeben.

Genau ein Objekt muß das Main beinhalten.


Peter

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... oder 4. alles manuell angeben.
Das finde ich zumindest für den Anfang angemessen, weil man
erstens ein Gefühl dafür bekommt, was eigentlich passiert, und
es zweitens bei kleinen Programmen sinnvoll ist, und drittens
ab einer gewissen Programmgröße automatisch aufzeigt, wozu
make, IDE und Konsorten sinnvoll sein können.

Bevor man weiß, daß ein Programm main() braucht, sich schon
mit make herum zu plagen, finde ich nicht zielführend.

Autor: I. E. (anfaenger69)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kopier einfach das Fehlende main Zeug:

int main(void)
{
.
.
.
.
.
}

in die lcd_routines.c zwischen folgende zwei Zeilen:

"// sendet ein Datenbyte an das LCD"

und

"void lcd_data(unsigned char temp1)"


und lösche die doppellten includes heraus, falls Du sie mitkopiert hast:

#include <avr/io.h>
#include "lcd-routines.h"


Dann hat Der Compiler seinen gesuchten Einsprungspunkt, von wo das 
Programm eigentlich gestartet wird.

Es ist zwar nicht die feine Art, wie in C geschrieben wird, aber Du 
kommst schon mal zu Deinem Ziel.

In Zukunft heisst die erste Datei immer main.c und dort muss immer ein 
code

int main (void)
{
}

vorhanden sein. Dort wird beschrieben was der Prozessor alles als erstes 
macht. Alle anderen Dateien und Routinen werden dann aus dem main 
Programm aufgerufen. Lade Dir mal ein paar Beispielprojekte aus der 
Codesammlung herunter und Du wirst sehen wie die anderen Dateien 
zusammen hängen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.