WinAVR: gezielt Bytes im Flash belegen

22/12/2010 - 10:44 von Tilmann Reh | Report spam
Hallo zusammen,

ich möchte für ein Projekt mit einem ATmega, programmiert mit WinAVR in
C, gezielt ein paar Byte im Flash mit bestimmtem Inhalt belegen.

Die Position dieser Bytes soll gleich hinter der Vektorliste liegen,
z.B. auf Adresse 80h. Der Compiler legt aber den Startup-Code und die
gesamte Applikation zusammen in ein einziges Segment (.text). Wenn ich
dort mit einem kleinen Assemblermodul und entsprechender
Linker-Anweisung eigenen (konstanten) Inhalt hinlege, gibt es also eine
entsprechende Overlap-Fehlermeldung vom Linker. :-(

Wie bekommt man am einfachsten ein paar konstante Bytes an definierter
Stelle ins Flash?

Den Startup-Code holt sich WinAVR aus der Entwicklungsumgebung - ich
könnte den deaktivieren und ein entsprechendes eigenes (abgeàndertes)
Modul ins Projekt einbinden. Ich weiß aber nicht, welche Automatismen
die Umgebung noch auf den Code anwendet (z.B. Kürzen der Vektorliste,
Eintragen der Vektoren, Zusammenfassen von Segmenten) - so daß mir
dieser Ansatz etwas riskant erscheint. Und die CRT1 im WinAVR zu àndern,
ist systematisch falsch: diese konstanten Bytes gehören zum Projekt und
nicht zum Arbeitsplatz.

Danke für Hinweise,
Tilmann
 

Lesen sie die antworten

#1 Heiko Lechner
22/12/2010 - 12:29 | Warnen spam
Am 22.12.2010 10:44, schrieb Tilmann Reh:

Die Position dieser Bytes soll gleich hinter der Vektorliste liegen,
z.B. auf Adresse 80h.



Also du hast eine neue section gebastelt und mit
"--section-start=.bla34" den Linker angewiesen diese irgendwo hin zu
schieben?

Der Compiler legt aber den Startup-Code und die
gesamte Applikation zusammen in ein einziges Segment (.text). Wenn ich
dort mit einem kleinen Assemblermodul und entsprechender
Linker-Anweisung eigenen (konstanten) Inhalt hinlege, gibt es also eine
entsprechende Overlap-Fehlermeldung vom Linker. :-(



".text" wird man doch auch verschieben können?

Ähnliche fragen