Forum: Compiler & IDEs [AVRGCC] Konstante an fest definierte Adresse im Flash


von Christian I. (alloc)


Lesenswert?

Hi alle,

weis zufällig jmd, wie man dem AVR-GCC sagen kann, dass er eine 
bestimmte Konstante an eine bestimmte Adresse im Flash legt? Also zB 
nen Byte an die letzte Adresse im Flash? Ich kann zwar Werte ohne 
Probleme in den Flash legen, allerdings werden die dann ja bei jedem 
Compilieren an ner andren Adresse landen können, und das darf nicht sein 
=)
Wäre für jeden Hinweis dankbar.

Grüße,
Chris

von Rolf Magnus (Gast)


Lesenswert?

Du kannst ein Linkerskript schreiben, das ein bestimmtes Symbol an eine 
feste Adresse legt.

von Warum geht das Einloggen nicht? (Gast)


Lesenswert?

1
uint8_t meine_var __attribute__ ((section (".meine_section"))) = 0x01;

Beim Linker-Aufruf kannst Du dann der Section "meine_section" eine feste 
Adresse geben. Die Syntax hab ich gerade nicht auswendig, steht aber in 
der gcc-Doku.

Falls Du AVRStudio benutzt: nimm die neueste  (vom Jan. 2007?).
In den älteren Versionen wurden so angelegte Sectionen nicht ins Flash 
geladen.

Viele Grüße, Stefan

von Christian I. (alloc)


Lesenswert?

Danke euch beiden =)
Noch eine Frage dazu: Beachtet der gcc dabei dann auch, dass an der 
jeweiligen Adresse schon was liegt und versucht dementsprechend nicht 
mehr da noch normalen Code hinzulegen? Also spart er quasi all diese so 
definierten Stellen aus?

Gruß,
Chris

von Stefan K. (_sk_)


Lesenswert?

Christian Illy wrote:
> Danke euch beiden =)
> Noch eine Frage dazu: Beachtet der gcc dabei dann auch, dass an der
> jeweiligen Adresse schon was liegt und versucht dementsprechend nicht
> mehr da noch normalen Code hinzulegen? Also spart er quasi all diese so
> definierten Stellen aus?

Wenn Du mit sections arbeitest, dann hast Du dieses Problem nicht; der 
Compiler/Linker erledigt das für Dich.

Wenn Dein Programmspeicher sich mit Deiner neuen section überlappt, dann 
gibt es einen Linker-Error (ja, man kann Fehlermeldungen auch positiv 
sehen ;-) ).

von Christian I. (alloc)


Lesenswert?

K, vielen Dank, klappt alles =)

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.