Ich verwende aktuell einen LCP2132(ARM7). Das FLASH liegt von $00000000-$0000ffff. Dabei sind die ersten 8 Sektor jeweils 4kByte groß, gefolgt von einem 32kByte Sektor. Im ersten Sektor liegen unteranderem die Resetvektoren. Ich muss im FLASH Konfiguratiosndaten dauerhaft abspeichern; ich haben mir dazu folgende FLASH-Belegung ausgedacht: - $00000000-$00000FFF Vektoren und Progamm - $00001000-$00001FFF --Reserviert für Konfigdaten - $00002000-$0000FFFF Restliches Programm Wie erkläre ich es dem Linker? Gruß D.Peters
Mit dem entsprechenden linker control script Als Vorlage kann das Default-lcs deines µC deiner Toolchain dienen. Du bekommst raus, welches das ist, wenn du die Toolchain mal mit der -v Option aufrufst, um die vom gcc Compilerdriver erzeugten Kommandozeilen auszugeben und dann die auf ldscripts untersuchst.
Wenn du deine Konfigdaten ganz hinten im Flash ablegst, solltest du auch rein mit Kommandozeilenoptionen auskommen. Das Standard-LCS bastelt eine Section namens .text an den Anfang des Flashs, und du packst deine Konfigdaten einfach in eine zweite Section (mit beliebigem Namen), deren Startadresse du dann mittels der Linkeroption --section-start festlegst (wenn man vom Compiler aus eine Linkeroption festlegen will, gibt man als Präfix ein «-Wl,» an).
Wenn ich meine Konfiguration ganz nach hinten lege, liegt diese im 32K-Sektor und diesen müsste ich beim erneuten Abspeichern der Konfiguration vollständig löschen, um ihn neu beschreiben zu können, dadurch wäre dann aber auch das Porgamm betroffen.
Tja, wenn dem so ist, dann hat NXP da wohl eine ungeschickte Aufteilung des Flashs (ich finde in deren Datenblättern und Appnotes gerade keine relevante Information dazu). Dann bleibt dir weiter nichts übrig, als im Linkerscript die Tabellen am Anfang vom eigentlichen Programmcode zu trennen, damit deine eigenen Daten dazwischen geschoben werden können.
Da ich das Linkerscript irgendwie nicht verstehe, habe ich folgende Lösung gefunden: - Ich habe in der startup.s hinter den Vectoren fix n*0xffffffff eingetragen, dadurch habe ich den Bereich reserviert ,muss nur mit einer fixen Adresse für die Configdaten arbeiten. - Müssen die Configdaten gespeichert werden, so kopiere ich zunächst den kompletten Sector0(4K) ins RAM, trage in die Kopie die Configdaten ein, lösche den Sektor0 und schreiben anschließend die geänderte Kopie ins FLASH. ACHTUNG: Während des Löschens und Beschreiben des FLASH's müssen die IRQ's gesperrt werden.
D.Peters schrieb: > Da ich das Linkerscript irgendwie nicht verstehe Warum postest du es nicht hier und beschreibst, was du darin nicht verstehst?
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.