Wie ist das Hauptprogramm, wie ist das makefile?
Den Fehler kenne ich an sich nicht. Ich habe nun nochmal dein Code Nr.2 kopiert und kompilieren lassen.
Irgendwie scheint mit nem Code von Winavr selber was nicht zu stimmen.
Gruß, Werner
Wie ist das Hauptprogramm, wie ist das makefile?
Makefile macht ja avrstudio selber. Darum muss ich mich ja im Normalfall nicht kümmern!?
Hauptprogramm existiert eigentlich keins. Solange doch dieser Code nicht fehlerfrei kompiliert wird, wird ein Hauptprogramm auch nichts bringen. Sehe ich das falsch?
Der Code sollte später auf einem Mega 8 ohne externen Quarz laufen.
Ich würd mich echt freuen, wenn des klappen würde!
Gruß, Werner
du brauchst auf jeden Falll nen Funktion namens main. Die muss in jedem Programm vorhanden sein. main wird als erstes aufgerufen, wenn der AVR startet.
Pack am besten ne Ausgabe des rxbuffers (LEDs, LCD, UART, wasauchimmer du am AVR hängen hast) in main. Oder die Werte aus dem rxbuffer lesen, verändern und in txbuffer packen....
avr-gcc.exe -mmcu=atmega8 M8LED.o Zeit.o twislave.o -o M8LED.elf
twislave.o: In function `init_twi_slave':
../twislave.c:35: multiple definition of `init_twi_slave'
M8LED.o:C:\Dokumente und Einstellungen\Werner\Eigene Dateien\M8LED\twislave.c:35: first defined here
twislave.o: In function `__vector_17':
../twislave.c:47: multiple definition of `__vector_17'
M8LED.o:C:\Dokumente und Einstellungen\Werner\Eigene Dateien\M8LED\twislave.c:47: first defined here
make.exe: *** [M8LED.elf] Error 1
Habs gerade mal mit dem Programmersnotepad kompiliert, weil man da ja offensichtlich eine genauere Fehlerbeschreibung bekommt.
So wie es ausschaut, meckert er zweimal wegen multipler Definition.
Hast du ne Ahnung, was ich anders machen kann?
Hast du vielleicht das ganze Zeug einmal im Hauptprogramm und einmal in der twislave.c stehen? Oder die twislave.c zweimal eingebunden? (muss ich bei Gelegenheit mal ändern, damit das nicht mehr zu nem Fehler führt)
Ich hab jetzt mal meine aktuelle Version ins Wiki gepackt.
https://www.roboternetz.de/wissen/in...ve_mit_avr-gcc
Ne genauere Beschreibung folgt die Tage.
Ich glaube das war der springende Punkt. Wenn ich jetzt über diesen Projektmanager twislave.c einfüge, diese Datei extra kompiliere und anschließend build klicke, kommt kein Fehler mehr!
Habe aber jetzt noch ne Frage. Wie kann ich den nun die Funktion am leichtesten testen:
init_twi_slave(0x50);
Reicht das schon, dass ich vom Master aus was sinnvolles empfange?
Sorry für die vielen Fragen...
Mit
init_twi_slave(0x50);
aktivierst du die Schnittstelle und setzt die Slave-Adresse auf 0x50.
Um die Kommunikation zu testen, müssterst du z.B. was in den txbuffer schreiben:
txbuffer[0]=255;
txbuffer[1]=100;
txbuffer[2]=33;
...
Wenn du jetzt vom Master aus auf den Slave zugreifst, müsstest du diese Wert erhalten.
Nen Codeschnipsel für den Master, benutzt die fleury-Master-lib:
Code:#define SLAVE_ADRESSE 0x50 if(!(i2c_start(SLAVE_ADRESSE+I2C_WRITE))) //Slave bereit zum lesen? { i2c_write(0x00); //buffer Startadresse zum Auslesen i2c_rep_start(SLAVE_ADRESSE+I2C_READ); //Lesen beginnen byte0= i2c_readAck(); byte1= i2c_readAck(); byte2= i2c_readAck(); i2c_stop(); }
Das will bei mir nicht klappen![]()
Nach wie vor wird das bei mir nicht richtig kompiliert.
Standardfehler sind mittlerweile:
../../../../../avr-libc-1.4.5/crt1/gcrt1.S:51: undefined reference to `main'
oder
make.exe: *** No rule to make target `C:/Dokumente', needed by `main.elf'. Stop.
Das Problem ist, dass diese c-Datei in meiner main.c nie ordentlich eingebunden ist, ansonsten käme doch kein impilicit Declaration.
Hab echt keine Ahnung, warum das bei mir so Probleme macht...
Gruß
PS: Nichtmal dieses bescheurte Beispielprogramm 311 von Atmel wird fehlerfrei kompiliert!
Lesezeichen