Hallo allerseits, ich habe nun als Anfänger schon kleine Programmchen in Assembler auf meinen ATMega32 erfolgreich geschrieben. Nun habe ich einen Hardware-Debugger (JTAGIce). Dieser zeigt mir aber bei jedem Debug-Schritt, dass die Werte in den SRAM Speicherzellen einfach toggeln und teilweise wirre Werte haben. Wie kann ich nun das gesamte SRAM auf einen Schlag initialisieren (z.B. löschen)? Vielen Dank schon mal für die Hilfen. Gruß Jan Purrucker
>Wie kann ich nun das gesamte SRAM auf >einen Schlag initialisieren (z.B. löschen)? Was soll das für einen Sinn haben? Du liest ja bestimmte Adressen im Ram erst nachdem sie beschrieben worden sind.
Da wirst du wohl eine kleine Schleife programmieren müssen, in der jede RAM-Zelle einzeln gelöscht wird.
Hallo, wie programmiere ich nun die Schleife, in der ich z.B. 2048 Ram Zellen löschen kann. Das passt ja nicht mehr in eine 8bit Variable, und den Z-Pointer kann ich ja auch nicht mittels "inc Z" inkrementieren. Für einen kurzen Beispiel code wäre ich sehr dankbar. Gruß Jan
Hallo, ldi YL, low(RamStart) ldi YH, high(RamStart) ldi ZL,low(RamLen) ldi ZH,high(RamLen) clr temp loop: st Y+,temp sbiw Z,1 brne loop ... oder loop: st Y+,temp dec ZL brne loop dec ZH brne loop ... Gruß aus Berlin Michael
Man sollte dabei nur darauf achten, dass man sich nicht den Stack kaputtmacht.
Hi @Michael: Du weisst, das du damit sämtliche IO-Register und r0-r31 mit löscht. Der interne RAM fängt beim ATMega32 bei Adresse $60 an und endet bei Adresse $85F @Jan: Wahrscheinlich ist das auch dein Problem. Die RAM-Adresse 0 ist r0. Wenn du den RAM ab Adresse 0 betrachtest siehst du die Änderungen an den Registern und IO-Registern. MfG Spess
Hallo, @spess53: habe ich mich irgendwo zum Wert von RamStart und RamLen geäußert? ;-) Allgemeingültig: ldi YL, low(SRAM_START) ldi YH, high(SRAM_START) ldi ZL,low(SRAM_SIZE) ldi ZH,high(SRAM_SIZE) sind die Definitionen aus den xxxxdef.inc der AVR. Hinweis1: NUR direkt am Anfang nach Reset und VOR SEI aufrufen! Hinweis2: Klappt nur bis max. 64k Ram. ;) Fehlt noch was? Gruß aus Berlin Michael
Hi Entschuldige, ich hatte wahrscheinlich zu schnell nach unten gescrollt. Hast natürlich Recht. Meine Meinung, das Jan die Register beobachtet hat, halte ich aber weiter Aufrecht. MfG Spess
Hallo Michael, vielen Dank für die Kompetente Auskunft. Aber ich kann ja diese Ram Initialisierung auch nach der Initialisierung der Peripherie einfügen, da ja die Ram-Adressen erst ab 0x0060 beschrieben werden, und somit nicht die "Steuerbits" bis 0x0060. Ist das korrekt so? Vielen Dank nochmals. Gruß Jan Purrucker
Hallo, ja sicher kannst Du das. Es darf nur noch keine aktiven Interrupts geben und es darf sich so nicht in einem Unterprgramm befinden, weil eben auch der Stack rigoros auf 0 gesetzt wird und damit keine gültige Rücksprungadresse für eine IRQ-/Subroutine mehr vorhanden wäre. Gruß aus Berlin Michael
Hallo Michael, stimmt genau. Ich bin zwar schon fortgeschrittener Anfänger, aber ich stolpere immer wieder über solche Dinge. Vielen Dank nochmals für die Kompetente Hilfe. Gruß Jan
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.