Grad zufaellig hab ich da heute was zusammengeschustert. Ich verwende
CoIDE, hab haber deren Startupcode etwas veraendert.
Das Linkerscript macht die sections .data (initialisiert) und .bss
(null-gefuellt) im normalen SRAM, sowie .ccmdata und .ccmbss im core
coupled memory. Der Stack liegt auch im core coupled memory.
Achtung: Das geht nur, wenn auf lokale Variablen nie via DMA zugegriffen
werden soll, was z.B. bei Verwendunge der
SD-Karten-Beispielimplementationen, die man so im Netz findet, in die
Hose geht, wenn man mal ein File nur lokal in einer Funktion bearbeitet.
Linkerscript im Anhang, ebenso wie das modifizierte Startup-File (man
beachte die Definition des Stacks in der Vektortabelle sowie das
Initialisieren der sections im Default_Reset_Handler
Im Quellcode habe ich noch die defines:
1 | // defines to move global variables to core coupled memory
|
2 | // use _CCM for uninitialized variables
|
3 | #define _CCM __attribute__((section (".ccmbss")))
|
4 | // use _CCMDATA for initialized variables
|
5 | #define _CCMDATA __attribute__((section (".ccmdata")))
|
und kann damit globale variablen so in den core-coupled memory legen:
1 | uint32_t _CCM NullInitialisiert;
|
2 | char _CCMDATA Beispiel[] = "Beispiel";
|
Achtung, nimmt man _CCM fuer initialisierte Variablen, mecker der
Compiler nicht, aber sie werden trotzdem in die .ccmbss section gelegt
und mit 0 gefuellt.
Vielleicht hilft das ja als Ausgangspunkt.