mikrocontroller.net

Forum: Compiler & IDEs anfängerfrage speicherverwaltung


Autor: alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gibt der bereich Data den benötigten Speicher für den Stack an?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: John (Gast)
Datum:

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

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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... und
unzählige andere Beiträge zu diesem Thema hier im Forum.

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.