mikrocontroller.net

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


Autor: Christian J. (Gast)
Datum:

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

Autor: Rolf Magnus (Gast)
Datum:

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

Autor: Niklas Gürtler (erlkoenig)
Datum:

Bewertung
0 lesenswert
nicht 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?
const void* batram = (void*) 0x1000000;

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
uint8_t* batram = (uint8_t*) 0x1000000;

Autor: Christian J. (Gast)
Datum:

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

Autor: Christian J. (Gast)
Datum:

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

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.