Fehlermeldung bei "Build" für lcd-routines.c:

Gast #1532194
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-Tutorial/LCD-Ansteuerung 
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
Gast #1532241
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.
#1533108
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;
}
Gast #1533354
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.
#1533435
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
#1533501
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.
#1533654
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren