Ich wollte mit Hilfe des AVR-Tutorial den Einstieg in die AVR ASM programierung finden. Nun bin ich auf ein Problem gestossen welches ich mir nicht erklären kann. Ich habe mir von Atmel das AVR Studio 3.52 gesaugt. Damit habe ich wie in dem Tutorial beschriebn den code assembliert und durchgestept. Bei der 4433 cpu hat dies auch soweit geklappt und man sieht in der Simulation sehr schön wie der stack sich ändert. Nun habe ich das gleiche für die 8515 gemacht und soweit kann man da auch durchsteppen. Nur zeigt das AVR Studio den Rambereich nicht an wo der Stack liegt demzufolge sieht man da auch nix. Ist das ein Softwarebug des Studios oder eine falsche Einstellung ? Ich habe aber nix gefunden um den Rambereich unter 60h anzuzeigen wo laut CPU Fenster der Stackpointer der CPU hinzeigt. Mein zeites Problemchen war das ich mir den STK200+ geholt habe der aber anscheinen nicht oder nicht mehr von dem AVR-Studio unterstützt wird ist das so richtig oder gab es mal versionen die damit auch liefen ? Vielen Dank schon im Vorraus für die Antwort. Gruss Martin
Hallo! Poste doch mal den Code den Du für das initialisieren des Pointers nimmst. Der 8515 hat 512 Byte Ram, daß heißt, Du hast 2 Bytes für den Stackpointer: High und Low. (Im Highbyte findet allerdings nur das LSB verwendung) um ihn zu initialisieren mußst Du folgende Zeilen nehmen: ldi temp,HIGH(Ramend) ; Stack Pointer Setup out SPH,temp ; Stack Pointer High Byte ldi temp,LOW(Ramend) ; Stack Pointer Setup out SPL,temp ; Stack Pointer Low Byte der Befehl "HIGH" nimmt von der folgenden 16-Bit-Konstante (Ramend) nur das hochwertige Byte und "LOW" demnach nur das niederwertige. Ramend ist eine Konstante welche der Interpreter automatisch auf den Wert der letzten RamAdresse setzt. Diese Zeilen brauchst Du immer, wenn Du einen uC mit mehr als 256 Byte Ram nimmst. ciao, Andi
Hallo nochmal! Sorry, das mit LSB oben stimmt nicht, da die Adresse ja nicht bei 0 anfängt sondern bei $60. Also finden im 8515 für die SRam-Adresse im HighByte die BEIDEN niederwertigsten Bits Verwendung. Die Höchstmögliche SRAM-Adresse beim 8515 ist $25F, auf diese muß der Stackpointer eingestellt werden. Und genau das wird mit den obigen 4 Zeilen Code erreicht Jetzt stimmts. :) ciao, Andi
Zun Deiner zweiten Frage: das AVR Studio hat das STK200 noch nie direkt unterstützt. Dazu gibt es ein zusätzliches Programm das beim STK200 dabei ist. Das ist aber eigentlich kein Beinbruch, Du must lediglich damit leben das man zwei Programme, Studio und ISP Software, gleichzeitig starten muß. Irgendwelche Debugfunktionen oder sonstige Sachen die man mit dem STK500 machen könnte gibt es bei 200 eh nicht. Gruß Markus
Danke Andreas und Markus, das mit dem AVR Studio ist dann soweit klar. Ich bin nur auf die Idee gekommen das das Studio den STK200 unterstütz hätte weil die Software welche dabei ist von KANDA dies macht. Nur haut mich der Kanda Asembler nicht um weil ich mit dem ASM befehl ramend gleich mal auf die NAse gefallen bin und sich damit nix assembleiren leiss weil der den befehl nicht kennt die def dateinen von Atmel auch leider inkompatibel sind u nd mir das AVR Studio soweit nun auch besser gefällt. Nun zu dem Stack Problem . Bei dem 4433 wurden im stack auch gleich immer zwei bytes gesprungen also dachte ich das ich einfach die def datei im asm code austausche mit der von dem 8515 und damit dann neu überstzte. Das hat auch ohne fehlermeldung geklappt und das steppen geht ja auch nur angezeigt wird nix. Komischer weise zeigt das ramfenster immer ab 60h an und der stackpointer im cpu fenster steht ja unterhalb. Den code den ich genommen habe ist der unveränderte aus dem tutorial. .include "8515def.inc" ;bzw. 2333def.inc .def temp = r16 ldi temp, RAMEND ;Stackpointer initialisieren out SPL, temp rcall sub1 ;sub1 aufrufen loop: rjmp loop sub1: ;hier könnten ein paar Befehle stehen rcall sub2 ;sub2 aufrufen ;hier könnten auch ein paar Befehle stehen ret ;wieder zurück sub2: ;hier stehen normalerweise die Befehle, ;die in sub2 ausgeführt werden sollen ret ;wieder zurück der unterscheid wegen 1 byte und 2 byte ist mir im prinzip schon klar aber warum macht die 4433 cpu dann im stack auch eine 2 byte reservierung wenn die nur ein byte benötigt. deshalb kam ich ja auf den trichter einfach nur die def datei auszutauschen. Danke Martin
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.