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
Du kannst ein Linkerskript schreiben, das ein bestimmtes Symbol an eine feste Adresse legt.
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
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
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 ;-) ).
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.