Forum: Compiler & IDEs anfängerfrage speicherverwaltung


von alex (Gast)


Lesenswert?

Hallo. Also der Soeicher der Avr Controller wird doch in Flash, SRAM und
EEProm unterteilt. Nachdem ein Programm mittels MakeAll im Programmers
Notepad compiliert wurde kann man doch ablesen wieviel Prozent des
Speicher belegt wurde. Es erfolgt eine Unterteilung in Programm und
Data. Warum wird das getrennt? Der Programmcode sowie Konstanten oder
Wertetabellen werden doch sowieso im Flash abgelegt oder nicht?

von alex (Gast)


Lesenswert?

gibt der bereich Data den benötigten Speicher für den Stack an?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> gibt der bereich Data den benötigten Speicher für den Stack an?

Nein, nur den statischen RAM-Verbrauch.  Falls da richtig .data
steht, dann handelt es sich um (nicht mit 0) initialisierte
Variable (die brauchen nämlich außerdem noch Flas -- für die
Initialwerte), während .bss die nicht initialisierten Daten
angibt (die vom Laufzeitsystem ausgenullt werden).

Stack kommt hinzu, dessen Verbrauch kann der Compiler aber nicht
so ohne weiteres ermitteln.

von Wolfram (Gast)


Lesenswert?

>Es erfolgt eine Unterteilung in Programm und
>Data. Warum wird das getrennt?
google mal nach Harvard Architektur, eine solche programmierst du
nämlich gerade
>Der Programmcode sowie Konstanten oder
>Wertetabellen werden doch sowieso im Flash abgelegt oder nicht?
Wenn du explizit sagst das das ganze in den Flash soll ja, sonst
nicht.
Dann liegt es im RAM. Siehe avrlibc Doku.

von alex (Gast)


Lesenswert?

Harvard Architektur usw. ist mir bekannt aber ich verstehe nicht wie
z.b. Konstanten im Ram gehalten werden soll. Nach dem abschalter der
Versorgungsspannung verliert das SRAM doch alles. Also müssen die Daten
doch zwangläufig im Flash gespeichert sein. Sicherlich kann das Prgramm
dann nach einem neustart Konstanten,Variablen etc. im Ram
ablegen aber trotzdem müssen diese doch vorher im Flash untergebracht
sein oder?

von John (Gast)


Lesenswert?

Recht hast Du, aber der RAM-Zugriff ist schneller.
Darum ist es sinnvoll, häufig benötigte Konstanten ins Ram zu kopieren.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Nein, der RAM-Zugriff ist nicht schneller. Der Grund warum die
Konstanten im RAM landen ist dass beim Harvard-Prozessoren wie dem AVR
ROM und RAM unterschiedlich angesprochen werden, und das mögen viele
C-Compiler nicht. Beim MSP430, ARM und vielen anderen bleiben die
Konstanten im ROM wie sich das gehört.

von Rolf Magnus (Gast)


Lesenswert?

Bei der Harvard-Archiktektur wird auf die beiden Speicher auf
unterschiedliche Weise zugegriffen. Daher kann eine normale Variable
nicht einfach im Flash stehen.

> Sicherlich kann das Prgramm dann nach einem neustart
> Konstanten,Variablen etc. im Ram ablegen aber trotzdem müssen
> diese doch vorher im Flash untergebracht sein oder?

So wird das auch gemacht. Es gibt allerdings spezielle Attribute, mit
denen man angeben kann, daß eine Variable im Flash liegen soll. Man
kann dann aber z.B. keinen normalen Zeiger darauf zeigen lassen.

von Rolf Magnus (Gast)


Lesenswert?

> Nein, der RAM-Zugriff ist nicht schneller.

Doch, und das ist auch recht einleuchtend. Der Programmcode wird
bereits aus dem Flash gelesen. Wenn zusätzlich zum Befehl noch ein
Datenbyte eingelesen werden muß, kann dies nur nacheinander erfolgen.
Ein RAM-Zugriff kann gleichzeitig erfolgen und ist damit schneller.
Deshalb gibt's doch die Harvard-Architektur.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Sagen wir es so: die Geschwindigkeit ist beim AVR kein Grund Konstanten
aus dem RAM zu laden. 2 Cycles oder 3 Cycles, das wird in der Praxis zu
< 10% Unterschied.

von alex (Gast)


Lesenswert?

also zusammenfassen kann man also sagen das konstanten variablen usw.
ursprünglich im flash abgelegt werden. nach dem programmstart werden
diese ins ram ausgelagert um so schneller auf diese zugreifen zu können
und belegen somit also doppelt speicher (im flash und im ram).. ist das
soweit richtig ja ?

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Sie werden nicht ins RAM kopiert um schneller darauf zugreifen zu
können, sondern um überhaupt darauf zugreifen zu können ohne
umständliche Makros verwenden zu müssen. Siehe auch
http://www.mikrocontroller.net/forum/read-2-266464.html#266799 und
unzählige andere Beiträge zu diesem Thema hier im Forum.

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
Noch kein Account? Hier anmelden.