Hi! Habe kein Problem aber so langsam bald einen Frust. Hatte ursprünglich folgenden ASM-Code im Prog: adiw zl,MPMin lpm r18,z+ lpm r19,z+ lpm r20,z Eigentlich ganz praktisch mit dem "LPM rd,z+". Byte wird vom Flash in Register rd geladen und die Adresse in Z um 1 erhöht. Also, warum nicht benutzen. Tja, nur funktionierte das gesammte Prog dann nicht richtig und ich begab mich natürlich an anderer Stelle im Code auf stundenlange Fehlersuche. Bis ich in der Online-Hilfe von AVR-Studio mir den Befehl LPM rd,z genau angesehen hatte und ich mußte sehr frustriert feststellen, das es im ATTiny26 zwar "LPM" und "LPM rd,z" gibt aber nicht "LPM rd,z+". Nicht mal der depperte Compiler im AVR-Studio konnte mich trotz Device-Angabe im tn26def.inc darauf hinweisen. Mußte den Code wie folgt ändern damit alles wieder funtzte: adiw zl,MPMin lpm r18,z adiw zl,1 lpm r19,z adiw zl,1 lpm r20,z Dieser Umstand kostet halt wieder 2 Words (4 Bytes) mehr im Flash wo von die kleinen AVR´s ja nicht viel haben. Vielleicht ist ja mein Vorhaben zu groß für den Tiny26. "Not all variants of the LPM instruction are available in all devices." steht in der Online-Hilfe. Was soll das eigentlich einen simplen Befehl wie diesen einfach wegzulassen wo die Core doch bestimmt nicht größer als ein Stecknadelknopf ist? Wieviele verschiedene Core´s gibt es eigentlich vom kleinsten bis zum größten AVR und welche Bezeichnungen haben die Core´s? Gibs darüber irgend wo eine Übersicht? Was bezwegt ATMEL damit, gerade bei den kleinen AVR´s solch simplen aber hilfreichen Befehle wie "LPM rd,z+", "MOVEW..." etc. einfach wegzulassen? Frustrierter Gruß Andi
Welche Befehle, inkl. Varianten, der einzelne AVR genau unterstützt, steht im Datenblatt unter "Instruction Set Summary". Die Hilfe im AVR-Studio listet die Befehle nur allgemein auf. Warum aber bestimmte Befehle in bestimmten Prozessorkernen nicht vorhanden sind, kann ich auch nicht sagen. Ist möglicherweise vom Alter abhängig? Gruß Ingo
Das mit dem alter der Core habe ich mir auch schon gedacht aber die könnten doch bei einem neueren Tiny den Core z. B. vom Atmega 8 nehmen. Oder kam der Atmega 8 erst nach dem Tiny26 raus? Gruß Andi
Hi... Schau dir doch mal LPM beim 2313 an. Dagegen ist der Tiny26 doch schon recht komfortabel... ...HanneS...
also beide aktuellen AVR Assembler 1.75.6 aus AVR Studio 4.09 und auch Version 2.01 Beta 1 erzeugen beim Tiny26 folgende Meldung: warning : 'LPM Rd,Z+' not supported on this device also ggf. die aktuelle Version von AVR Studio downloaden.
In den ersten Datenblättern stand der 'LPM Rd,Z+' noch drin, aber durch einen Bug wird nur das Low-Register hochgezählt. Und statt den Bug zu beheben, haben sie einfach den Befehl rausgenommen. Wenn Du also sicher bist, daß das High-Byte gleich bleibt, kannst Du ihn trotzdem nehmen. Peter
Na ja, so viel zur Kompatibilität.!? Steffen PS: Peter (ist net bös gemeint) weiß, was ich meine, der Rest kann den Beitrag getrost ignorieren.
Ach so ist das also! Da mach ma mal schnell nen µC und schmeißen den gleich mal ohne großartige Test auf´n Markt. Und die Kunden werden über Fehler schon frustriert berichten. Allerdings ist der Core für den Tiny26 doch älter als der µC selber und wurde von einem Vorgängermodell übernommen, oder? Wenn, hätte ATMEL die Core doch gleich mal überarbeiten können. Na ja, egal! Wenn man´s weiß ist es ja halb so schlimm. Gruß Andi
@Peter: Benutzen werde ich den Befehl sicher nicht können da der Code oben aus einer Konstanten-Tabelle mit momentan 72 Byte, tendenz steigend, Werte aus verschiedenen Zeilen in Register zum arbeiten kopiert. Vielleicht probier ich es mal aus, wenn das Prog fertig ist, die Tabelle kleiner als 256 Byte groß ist und noch 256Byte oben im Flash übrig bleiben. Da hätt ich gleich mal ne Frage für mein Prog! Wie innitialisiere ich einen Timer welcher alle 1/10 Sekunden bei momentan 1MHz fortlaufend das Timer-Interruptprog aufruft? Brauche das für mehrere Abwärtszähler in Schritten von 1/10- und 1-Sekunden welches dann vom Timer-Prog gesteuert wird. Gruß Andi
Nun bei den kleinen wird bei den LD und ST Befehlen nur das Low-Register genommen, d.h. bei LD Rd,Z+ wird R31 nicht verändert und da hat wohl einer nicht an LPM gedacht. Peter
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.