www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SRAM Initialisieren


Autor: Jan Purrucker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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.

Autor: Sven Stefan (stepp64) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da wirst du wohl eine kleine Schleife programmieren müssen, in der jede 
RAM-Zelle einzeln gelöscht wird.

Autor: Jan Purrucker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Gast123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man sollte dabei nur darauf achten, dass man sich nicht den Stack 
kaputtmacht.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Jan Purrucker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Jan Purrucker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.