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
- beim Namen von main vertippt - die Datei mit main vergessen, ins Projekt aufzunehmen - main ganz vergessen - main und dain verwechselt
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.
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; }
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.
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
... 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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.