Speicheraufbau

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

Hinweis kann nach Kenntnisnahme deaktiviert werden!

  • Flash, SRAM, EEPROM.
    Hardware-Stack, Software-Stack, Frame.
    Diese verschiedenen Begriffe sind am Anfang verwirrend. Es geht hier aber einfach nur um verschiedene Speicherarten im Mikrocontroller und deren Nutzung.
    Schließlich muss das kompilierte BASCOM-Programm irgendwo gespeichert werden und auch die Variableninhalte müssen irgendwo gespeichert werden.
    Der Speicher im Mikrocontroller


    In einem ATmega bzw. ATtiny-Mikrocontroller gibt es drei Arten von Speicher.

    1.) Flash-Speicher:
    Speicherbereich, dessen Inhalt bei Abschalten der Spannungsversorgung erhalten bleibt. Hier wird das kompilierte Mikrocontroller-Programm im binären Format gespeichert. Beim ATtiny13 kann das Programm beispielsweise 1k Byte groß sein. Ein ATmega88 nimmt Programme bis zu 8k Byte auf.

    2.) SRAM-Speicher:
    Dieser Speicherbereich dient zum Speichern von Variablen-Inhalten, die beim Ausschalten verloren gehen.
    Innerhalb des SRAM gibt es wiederum vier verschiedene Bereiche:
    a.) Der Hardware-Stack-Bereich dient zur Speicherung von Rücksprungadressen (je 2 Byte) und für Registersicherungen (32 Byte).
    b.) Im Software-Stack werden die Adressen von Parameteren und lokalen Variablen (je 2 Byte) gespeichert.
    c.) Der Frame wird zur Speicherung von Parametervariablen (je nach Variablenlänge) und als Rechenbereich benutzt.
    d.) Datenbereich: Hier werden die vom Programmierer definierten Variablen gespeichert.
    Dabei ist zu beachten, wie viel Byte eine Variable jeweils belegt:
    Eine Byte-Variable belegt 1 Byte und kann Zahlen von 0 bis 255 darstellen..
    Eine Word-Variable (0 bis 65535) belegt 2 Byte.
    Eine Stringvariable (Zeichenkette) belegt so viele Bytes wie Zeichen plus ein Abschlussbyte.
    Die komplette Übersicht der verschiedenen Variablentypen findet man in der BASCOM-Hilfe.
    Die Grenzen zwischen diesen Bereichen innerhalb des SRAM-Speichers sind vom Programierer festlegbar.
    Speichernutzung:
    Mögliche Werte sind zum Beispiel bei einem ATtiny13: HWSTACK = 4 (für 2 gleichzeitig aktive Unter-Routinen), SWSTACK = 4 für zwei Parameter bzw. lokale Variablen und framesize=10 für Parameter und Rechenbereich. Es bleiben dann 64-4-4-10= 46 Byte Platz für eigene Variablen übrig.
    Da ein ATmega88 ein 1024 Bytes großes SRAM hat kann man HWSTACK = 40, SWSTACK=40 und FRAMESIZE = 60 dimensionieren und hat immer noch reichlich Platz (1024 – 40-40-60 = 884 Byte)für eigene Variablen verfügbar.

    3.) EEPROM-Speicher: Speicherbereich für Variablen, deren Inhalte beim Abschalten der Spannung erhalten bleiben.
    Hier können Einstellungen oder Log-Werte oder ähnliches gespeichert werden, die beim nächsten Einschalten noch verfügbar sein sollen. Der EEPROM-Bereich kann allerdings nicht sehr oft und nicht sehr schnell beschrieben werden und sollte auf keinen Fall unbedacht in Schleifen beschrieben werden.

    Bild Speicheraufteilung:




    Speicheraufteilung_.jpg



    Speichergrößen ausgewählter Mikrocontroller:


    Flash-SpeicherSRAMEEPROMI/O-Pins
    ATtiny131k Byte64 Byte64 Byte5
    ATtiny252k Byte128 Byte128 Byte5
    ATtiny454k Byte256 Byte256 Byte5
    ATtiny858k Byte512 Byte512 Byte5
    Atmega88 Byte1k Byte512 Byte22
    ATmega484k Byte512 Byte256 Byte22
    ATmega888k Byte1k Byte512 Byte22
    ATmega16816k Byte1k Byte512 Byte22

    4.970 mal gelesen

Kommentare 2

  • stefanhamburg -

    Ich zitiere Dich einmal:
    mac5150:
    "In vielen Programmen habe ich beispielsweise mit Words und Bytes gerechnet,..."
    Quelle:
    bascomforum.de/index.php?threa…565/&postID=2116#post2116

    Laut Duden und allgemeinem Sprachgebrauch geht beides, aber wenn Du sonst keine Sorgen hast ... Habe es für Dich geändert.

  • mac5150 -

    Kleiner grammatikalischer Kommentar: Wir sagen auch nicht 10 Gramms. 64 Gramm sind 64 Gramm und 64 Byte sind nicht 64 Bytes. Also: Entweder überall richtig oder gewollt (wozu?) überall falsch.