Hallo, kann mir jemand sagen, wie ein Zeiger auf eine Memory Area gelegt wird? Also zB habe ich .batram 0x10000000 - 0x2000000 und als Untersections einige andere frei defnierte und möchte diesen Bereich bei Programmstart ausnullen. Klar kann ich die fixe Adresse so schreiben: ptr = &0x1000000 aber das wäre eben absolut und nicht das was ich suche. ptr = &.batram geht jedenfalls nicht. Idee?
Im Linkerskript ein Symbol definieren, das am Anfang des Speicherblocks liegt. Dessen Adresse kannst du dann in C benutzen.
Christian J. wrote:
> ptr = &0x1000000
Bitte das & weglassen, sonst wird eine normale (integer?-)Variable mit
dem Inhalt 0x1000000 angelegt, und ptr wird dann ein pointer auf diese
Variable.
Gefällt dir das besser?
1 | const void* batram = (void*) 0x1000000; |
> Bitte das & weglassen, sonst wird eine normale (integer?-)Variable > mit dem Inhalt 0x1000000 angelegt, und ptr wird dann ein pointer > auf diese Variable Nö, wird nicht. > Gefällt dir das besser? > const void* batram = (void*) 0x1000000; Einen void* wird er sowieso nicht verwenden können, um den Speicher zu beschreiben, und einen const void* schon gar nicht. Wenn, dann eher sowas wie:
1 | uint8_t* batram = (uint8_t*) 0x1000000; |
Hallo, ein Linkerskript habe ich nicht, das erzeugt Rowley intern. Weiss vielleicht jemand der Rowley benutzt, wie man sowas anlegt? Absolute Adressen will ich nicht verwenden.
Hat sich erledigt: extern uint32_t _batram_start_; definieren. Das Wort wird automatisch bei Rowley im -batram Segment erzeugt. USB Ram entsprechend __usbram_start__ Damit hat man schon alles und kann einen Zeiger drauf legen.
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.