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

Gast #1532194
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
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
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
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
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
... 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
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

Eine eigene Frage? Dieser Thread ist über 16 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.