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:
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-Speicher | SRAM | EEPROM | I/O-Pins | |
ATtiny13 | 1k Byte | 64 Byte | 64 Byte | 5 |
ATtiny25 | 2k Byte | 128 Byte | 128 Byte | 5 |
ATtiny45 | 4k Byte | 256 Byte | 256 Byte | 5 |
ATtiny85 | 8k Byte | 512 Byte | 512 Byte | 5 |
Atmega8 | 8 Byte | 1k Byte | 512 Byte | 22 |
ATmega48 | 4k Byte | 512 Byte | 256 Byte | 22 |
ATmega88 | 8k Byte | 1k Byte | 512 Byte | 22 |
ATmega168 | 16k Byte | 1k Byte | 512 Byte | 22 |
5.010 mal gelesen
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.