Woher weiß der Linker, welche Regions ins Hexfile kommen?

Gast #5524244
Lesenswert?

Hallo zusammen,

folgendes Problem:
Ich habe einen STM32F407VG mit "Core Coupled Memory" (CCM = spezielles 
RAM) an 0x10000000.
Mein Linker-File sieht so aus:
1
MEMORY
2
{
3
FLASH (rx)     : ORIGIN = 0x08000000, LENGTH = 1024K  
4
SRAM1 (xrw)    : ORIGIN = 0x20000000, LENGTH = 112K
5
SRAM2 (xrw)    : ORIGIN = 0x2001C000, LENGTH = 16K
6
CCRAM (xrw)    : ORIGIN = 0x10000000, LENGTH = 64K 
7
}
und
1
  .ccram :
2
  {
3
    . = ALIGN(8);
4
    *(.ccram)
5
    *(.ccram*)
6
    . = ALIGN(8);
7
  } >CCRAM

Das funktioniert aber nur, solange das CCM komplett ungenutzt ist. 
Sobald ich eine Variable ins CCM hineinlege, wird ein ELF-File erzeugt, 
das den ST-Link dazu bringt, den Bereich ab 0x10000000 flashen zu wollen 
(was natürlich nicht geht).
Wenn ich aus dem ELF-File ein HEX-File erzeuge, sehe ich darin auch 
einen Datenblock voller Nullen ab 0x10000000.

Ich muss also irgendwie dem Linker sagen können, dass der CCM-Bereich 
nicht ins ELF- bzw. HEX-File hinein soll. Ich dachte eigentlich, das 
geht über die Flags (xrw), aber das scheint's ja nicht zu sein, denn bei 
RAM und CCM sind die gleichen Flags angegeben.

Wie geht das denn? Danke.
Gast #5524938
Lesenswert?

Ein Schuß ins Blaue:

 .ccram (NOLOAD): ...

Mal geschaut, ob es nicht vollständigen Support 
(initialisierte/uninitialisierte Daten mit entsprendem Startupcode für's 
Kopieren/Löschen) für das CCRAM bereits gibt?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren