Schönen Tag. Ich habe mir ein schönes Bildchen gezeichnet,um mit den Speicherbereichen des µCs besser klar zu kommen. Soweit alles richtig? Hab ich irgendwas vergessen? Gruß!
Max H. schrieb: > Ich würde sagen, dass Konstanten, wenn es viele sind, ins Flash kommen. Ja. Aber dass muss der user dann schon selbst programmieren. Ich habe jetzt eher aufgezeichnet, was der Compiler automoatisch macht, ohne dass der user irgendwo eingreift. Gruß
@ Profi ;) (Gast) >> Ich würde sagen, dass Konstanten, wenn es viele sind, ins Flash kommen. >Ja. Aber dass muss der user dann schon selbst programmieren. Nein. Das muss man nur angeben. OK, bei AVR muss man dann noch anders zugreifen, Stichwort PROGMEM, aber bei vielen anderen Prozessoren landen die automartisch im Flash, weil die einen einheitlichen Adressraum haben.
Profi ;) schrieb: > Ja. Aber dass muss der user dann schon selbst programmieren. Nur wenn es sich um getrennte Adressräumen handelt. Was nicht der Fall sein muss.
Profi ;) schrieb: > Ja. Aber dass muss der user dann schon selbst programmieren. Das ist verkehrt herum gedacht. Die Konstanten sind immer im Flash, im SRam würden sie ja verloren gehen. Die Frage kann daher nur lauten, wie kommen sie von Flash ins Ram, wenn überhaupt. Im einfachsten Fall werden sie bei der Initialisierung dahin kopiert, wie initialisierte Variablen auch. Ein Befehl Mov Immediate Value to Variable tut ja nichts anderes als Value vom Programmspeicher ins RAM zu kopieren. Nach Anlegen der Spannung gibt es im System nur die Daten im Flash und im EEProm, alles andere ist undefiniert. Gruss Reinhard
Profi ;) schrieb: > Ich habe mir ein schönes Bildchen gezeichnet Um genau zu sein, was ich geschrieben habe, ist die physikalische Realität, was du gezeichnet hast, ist was der Compiler dir vorgaukelt. Gruss Reinhard
Reinhard Kern schrieb: > Die Konstanten sind immer im Flash, im > SRam würden sie ja verloren gehen. Hmm ja. Soweit ich verstehe werden bei Anlegen der Spannung an den µC alle globalen und statischen Variablen, sowie Konstanten aus dem Flash heraus in den SRAM kopiert? Bei Konstanten kann das mit PROGMEM unterbunden werden. Soweit richtig gedacht? Allerdings ist mir völlig unverständlich, weshalb Konstanten überhaupt ins SRAM geschoben werden. Wegen schnellerem Zugriff?
Profi ;) schrieb: > Allerdings ist mir völlig unverständlich, weshalb Konstanten überhaupt > ins SRAM geschoben werden. Wegen schnellerem Zugriff? Eine Möglichkeit. Oder der Prozessor kann auf den Programmspeicher nicht so zugreifen wie auf RAM (von Neumann / Harvard). Oder weil das schon immer so ist - Compiler von CP/M üder MSDOS bis Windows gehen ja davon aus, dass alles erstmal vom Loader ins RAM befördert wird, vom Compiler-Standpunkt aus gibt es da garkeinen Festwertspeicher. Nimmt man so einen Compiler für Embedded, macht er es zunächst mal so wie im PC auch. Aber notwendig ist es keineswegs, soweit ich in Assembler arbeite, werden Konstanten so definiert dass sie der Linker zusammen mit dem Code ins Eprom/Flash schreibt. Nebenbei spart es auch Speicherplatz, wenn man die Konstanten nur einmal im System hat, aber das als Gesichtspunkt gilt ja heute schon als anstössig. Gruss Reinhard
Vielen Dank Reinhard! Hat mir weitergeholfen. :) Ich denke das Bild ist, was den AVR betrifft ganz Ok. Die tieferen pysikalischen Begebenheit sollten einem allerdings auch klar sein. Aber die wollte ich in diesem Bild nicht darstellen. Hier geht es nur um die Übersicht, was es überhaupt so alles grob an Speicherbereichen gibt.
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.