anfängerfrage speicherverwaltung

Gast #363561
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?
Moderator Persönliche Seite #363563
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.
Gast #363564
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.
Gast #363565
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?
Gast #363568
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.
Gast #363569
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.
Gast #363571
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 ?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren