gcc unterschiedliche (hex) outputs für unterschiedliche Speicherbereiche

Gast #4515849
Hi,

gibt es eine möglichkeit, dass meine toolchain mir 2 Hex files 
ausspuckt, das eine, nur für den interenen Speicherbereich (0x08000000 
bis ...) und das andere für den externen Speicher (0x90000000 bis ...)

Hintergrund: Externen Flash muss ich mit eineme anderen Tool 
beschreiben. Wie bekomme ihc das hin?

(bin recht unerfahren im bereich gcc mit irgend welchen "besonderen" 
einstellungen. Bisher hat es meistens immer "einfach so" funktioniert, 
da ich nie groß externen Speicherbereich o.ä. hatte)


IDE ist sw4stm32 (eclipse basierend) für einen STM32
Gast
Ein Hex-File ist eine (fast) simple Text-Datei.
Die kannst Du mit jedem ASCII-Editor zerlegen.

In jeder Zeile ist die zugehörige Adresse angegeben.
Hinter den ersten Block musst Du nur die Abschluss Sequenz schreiben. 
Das ist die letzte Zeile in der Datei.
Da sich die Prüfsumme (letztes Byte in jeder Zeile) auf die jeweils 
aktuelle Zeile bezieht, sollte die auch kein Problem sein. Üblicherweise 
kommen auch keine Blockübergreifenden Zeilen vor.

Allerdings ist es etwas Problematisch, wenn bestimmte Bereiche 
(Adressmäßig) fixiert werden. Dann musst Du die Umschaltsequenzen vor 
dem 2. Block platzieren.
Manchmal befinden sich diese aber auch an genau der richtigen Stelle.
Gast
so sieht das bei mir im Atollic TS für ein touchgfx Projekt auf dem 
STM32F469 aus, der hat auch ein ext. 16 MB Flash
1
arm-atollic-eabi-objcopy  -O ihex ${ProjName}.elf target.hex
2
arm-atollic-eabi-objcopy --remove-section=ExtFlashSection ${ProjName}.elf intflash.elf
3
arm-atollic-eabi-objcopy  -O ihex --remove-section=ExtFlashSection  ${ProjName}.elf intflash.hex
4
arm-atollic-eabi-objcopy  -O binary --only-section=ExtFlashSection  ${ProjName}.elf extflash.bin
5
arm-atollic-eabi-size intflash.elf

Die sections müssen natürlich mit denen im Linkerfile übereinstimmen. 
Für das ExtFlash wird ein .bin erzeugt damit es mit dem STM FlashUtility 
geblitzdingst werden kann.
Amateur schrieb:
> Ein Hex-File ist eine (fast) simple Text-Datei.
> Die kannst Du mit jedem ASCII-Editor zerlegen.

Oder man nimmt ein geeignetes Tool dazu, dann kann man das auch scripten 
(bzw. ins Makefile tun). Für Linux würden sich die srecord Tools 
anbieten, speziell das srec_cat Programm. Das kann (anders als der IMHO 
etwas unglücklich gewählte Name vermuten läßt) nicht nur mit S-Record 
umgehen, sondern mit praktisch allen File-Formaten für ROM/FLASH Daten.

So kann man z.B. 0x0000..0x1000 von in.hex nach out.hex kopieren:

1
srec_cat in.hex -Intel -Crop 0x0000 0x1000 -Out test.hex -Intel

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 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.