Forum: Compiler & IDEs Woher weiß der Linker, welche Regions ins Hexfile kommen?


von Frank Roggel (Gast)


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.

von foobar (Gast)


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?

von Frank Roggel (Gast)


Lesenswert?

Danke, genau das war's!

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
Noch kein Account? Hier anmelden.