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?
gibt der bereich Data den benötigten Speicher für den Stack an?
> 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.
>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.
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?
Recht hast Du, aber der RAM-Zugriff ist schneller. Darum ist es sinnvoll, häufig benötigte Konstanten ins Ram zu kopieren.
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.
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.
> 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.
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.
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 ?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.