GCC-Linker (Linkerfile *.ldf)

Gast #2503561
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
Gast #2503823
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.
Moderator Persönliche Seite #2503885
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).
Gast #2504838
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.
Moderator Persönliche Seite #2504881
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.
Gast #2510470
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.