www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SRAM auslesen


Autor: Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,

wie kann man im AVR Studio den SRAM auslesen? Ich debugge mit nem ICE 
MKII. Im AVR Studio gibt es ein Memory Window. Dort finde ich aber 
nichts zum "SRAM"...

Mein eigentliches Problem ist aber, dass ich gerne wissen würde, ob der 
SRAM voll ist oder nicht! Wenn ja, was passiert wenn er voll ist? 
Explosion?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johann schrieb:

> Im AVR Studio gibt es ein Memory Window.

Und was stört dich daran? Dass kein "SRAM" dransteht? Ein Fahrrad fährt 
auch dann, wenn auf dem Reifen nicht "Reifen" draufsteht.

Autor: Frankl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da fallen den alle Daten aus dem AVR heraus und machen eine große 
Sauerei auf dem Tisch.

Jetzt im Ernst. Im Studio <View> <Memory> und <Data> (SRAM da Start bei 
0060).

Autor: Er (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst darauf achten die Daten nicht nur zu Schreiben sondern auch zu 
Lesen dann platzt da auch nichts.

duck und wech

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Du musst darauf achten die Daten nicht nur zu Schreiben sondern auch zu
>Lesen dann platzt da auch nichts.

Und wie macht man das ein software-WOM (write only momory)?

Autor: faustian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist in Wirklichkeit eine Lizenzsache wieviel das WOM aufnehmen kann, 
reine Softwarebeschraenkung.

Autor: Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frankl schrieb:
> Im Studio <View> <Memory> und <Data> (SRAM da Start bei
>
> 0060).

Hatte ich mir schon gedacht.

Hab jetzt mal geschaut und fast jedes meiner 512 Byte is belegt! Wird 
SRAM nach benutzen wieder gelöscht? Woran erkenne ich, ob ich "zu wenig" 
SRAM zur verfügung habe??

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johann schrieb:

> Hab jetzt mal geschaut und fast jedes meiner 512 Byte is belegt! Wird
> SRAM nach benutzen wieder gelöscht?

Nein.

Autor: Michael M. (technikus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johann schrieb:
> Mein eigentliches Problem ist aber, dass ich gerne wissen würde, ob der
> SRAM voll ist oder nicht! Wenn ja, was passiert wenn er voll ist?
> Explosion?

Wenn das SRAM voll ist, dann verschwindet die Lücke zwischen Heap bzw. 
globalen Variablen und Stack. Im nächsten Schritt überschreibt dann ein 
Speicherbereich den anderen und es gibt abstruse Fehler. Das kann 
passieren, obwohl .data, .bss und .noinit noch ins SRAM passen. Aber 
leider der Stack, der mit jeder aufgerufenen Funktion wächst, nicht 
mehr.

Hilfreich sind diese Infos: 
http://www.rn-wissen.de/index.php/Speicherverbrauc...

Servus
Michael

Autor: Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann ich denn pauschal davon ausgehen, dass wenn beim kompilieren "Data" 
rund die 50% voll ist der SRAM nicht überlaufen wird? Oder bringt einem 
diese Ausgabe gar nichts?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johann schrieb:

> Kann ich denn pauschal davon ausgehen, dass wenn beim kompilieren "Data"
> rund die 50% voll ist der SRAM nicht überlaufen wird? Oder bringt einem
> diese Ausgabe gar nichts?

Eine sichere Aussage ist es nicht, denn über dynamisch beanspruchten 
Speicher, wie malloc/free oder den Stack, sagt sie nichts aus.

Autor: Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wenn ich malloc/free nicht explizit verwende? Macht der Compiler 
sowas?

Autor: oldmax (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi
Zu deinem Verständnis: der SRam ist der Arbeitsspeicher deines µC's. 
Stell dir ein Blatt Papier vor. Oben schreibst du deine Variablen 
hinein, also dort sind die Speicherzellen, die du als Variablen 
definiert hast. Z.B.
Mein_Counter:    .Byte1
Diese Variablen beeinflußt dein Programm, setzt Werte sozusagen. 
Gelöscht wird da nix.
Nun kommt noch der Controller, denn er muß wissen, wo er war, wenn er 
auf einen Call trifft oder ein Interrupt ihn aus seiner routinemäßigen 
Arbeit abruft. Dazu hat er einen Stack. Das ist der Bereich auf deinem 
Blatt Papier von unten. Dort merkt er sich seine Rücksprungadressen und 
alles, was ihm per Push zum Merken notwendig erscheint. Dbei setzt er 
einfach seinen Adresszeiger auf die entsprechende Speicherstelle und 
trägt dort etwas ein. So bei einem Call die nächste routinemäßige 
Programmadresse, bei einem Push den Inhalt eines Registers. Findet er 
ein Ret (Rücksprung aus Unterprogramm, so holt er sich den Wert aus dem 
Stack, so nennt man dden Speicherbereich, und adressiert seinen 
Programm- oder Befehlszeiger mit diesem Wert. Ein Pop trägt den Wert vom 
Stack in das entsprechende Register ein. Danach wird der Stackzeiger 
entsrechend aktualisiert, also hochgesetzt. Man kann also sagen, die 
Variablen füllen den Speicher von unten und der Stack von oben abwärts. 
Hast du viele Variablen, so bleibt wenig für den Stack übrig, denn wenn 
der Controller einen Call sieht, beschreibt er gnadenlos den Stack. und 
setzt den Zeiger nach unten. Im schlimmsten Fall überschreibt der Stack 
den Variablenspeicher. Wenn du bspw. einen Interrupt hast, der sich 
innerhalb seiner Routine wieder aufruft, oder einen Call, der innerhalb 
des UP's wieder sich selbst aufruft, hast du nullkommanix den Stach im 
Variablenbereich und dein Controller läuft ins Nirwana. Übrigends, 
gelöscht wird gar nix, lediglich der Flashvor einer Neuprogrammierung 
mit einem Default-Wert geladen ( idR mit 255 dez oder FF hex.) Manche 
sagen, das Programm ist gelöscht. Ja, das Programm, aber nicht der 
Speicher...
Gruß oldmax

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.