Hallo allerseits, habe endlichmal angefangen mich in die Welt der Mikros hervor zu wagen. Nun hänge ich an der Stelle des Tutorials fest wo ein Text auf dem Display ausgegeben werden soll. Bei mir kommen immer wieder die errors call k: Unsupported instruction on ATmega8 bei laden der lcd routines. Bin sehr dankbar über jede Hilfe !!! Gruß
Den Befehl call gibt es auf dem ATMega nicht. Nimm rcall. Das selbe gilt übrigens, falls irgendwo ein jmp steht, das muss entsprechend durch rjmp ersetzt werden. Im Datenblatt steht übrigens ein Instruction Set Summary. Da steht drin, welche Befehle es für den jeweiligen AVR überhaupt gibt.
Danke für die schnelle Antwort. Da ich aber die codes aus dem tutorial 1:1 übernommen und auch noch mal nachgeprüft habe kann ich das ausschliessen. Hier nochmal der ganze error beim Build: ....\lcd-routines.asm(163)bzw.(243): error: call k: Unsupported instruction set on ATmega8
Stimmt Dein Compiler mit dem des Tuts überein? Welchen Compiler setzt Du ein? Sicher, dass Du den gleichen Controller nimmst?
Nein, da ist anscheinend tatsächlich ein Fehler im Code zum Tutorial! An einer Stelle steht "call lcd_data". Also wie oben schon gesagt: ersetze call durch rcall und es sollte laufen, falls nicht noch mehr Fehler drin sind. EDIT: Korrigiere: Es steht an ZWEI Stellen call statt rcall. Übrigens: Es macht i.d.R. kaum Sinn, eine Fehlermeldung ohne den dazugehörigen Code zu posten...
Sorry das mir jetzt peinlich,habe den Atmega8 16PU drin. Habe oben in der include aus 8 ne 16 gemacht und nun funktioniert es. Trotzdem danke für die Hilfe.
Klar, wenn Du das Ding für einen ATMega16 assemblierst, dann geht das Assemblieren, weil der Mega16 den call-Befehl hat. Aber der Code läuft nicht auf dem Mega8!!! Der Mega8-16PU ist ein Mega8 und der Mega8 hat (wie oben erwähnt) keinen call-Befehl! Code, der für einen Mega16 assembliert wurde, läuft unter Garantie nicht auf dem Mega8! Du musst die calls ersetzen, sonst gar nichts. Ich hoffe, das ist jetzt klar...
Trotzdem versteh ich es nicht da es sich ja um einen ATmega8 handelt.
B.K. wrote:
> Trotzdem versteh ich es nicht da es sich ja um einen ATmega8 handelt.
EBEN! Der Mega8 hat keinen call-Befehl, sondern nur einen rcall. Deshalb
musst Du, um den Code auf einem Mega8 zum laufen zu bringen, die beiden
vergessenen "r"s im Code hinzufügen! Ein Mega16 ist was völlig anderes!
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.