Forum: Compiler & IDEs GCC: Zeiger auf Section Segment legen?


von Christian J. (Gast)


Lesenswert?

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?

von Rolf Magnus (Gast)


Lesenswert?

Im Linkerskript ein Symbol definieren, das am Anfang des Speicherblocks 
liegt. Dessen Adresse kannst du dann in C benutzen.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

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;

von Rolf Magnus (Gast)


Lesenswert?

> 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;

von Christian J. (Gast)


Lesenswert?

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.

von Christian J. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.