Forum: Digitale Signalverarbeitung / DSP / Machine Learning Optimierung und Verteilung des C-Codes


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von YouJin (Gast)


Lesenswert?

Hi alle,

Ich versuche gerade den C-Code, den ich in CCS 3.3 geschrieben habe zu 
optimieren und verschiedene Caches der DSP zu nutzen. Ich tu mir da 
jedoch ein bisschen schwer mit.
Ich arbeite mit einem TI TMS320C6747. Dieser besitzt 2 x 32K L1, 256K L2 
und 128K Shared RAM. Bisslang habe ich den Code komplett in L2 geladen. 
Soweit funktioniert alles. Nun habe ich versucht ein paar Arrays auf L1 
zu bringen und schon funktionierte der Code nicht mehr. Ein Beispiel:

Vorher:

float *SIGNAL = (float *)0x11800000;

Nachher:

float *SIGNAL = (float *)0x11F00000;

L1 wird sonst niergens benutzt. Kann mir einer vlt. erklaeren, warum das 
so nicht mehr funktioniert.
Auch wenn ich den Compiler die Speichereinteilung ueberlasse, also ein 
fest definierten Array mit Pointer mache funktioniert es nich, z.B:

float SIGNAL[512];
float *SIGNAL_Z = SIGNAL;

Jedenfalls wollte ich mal einen grundsaetzlichen Ansatzt der 
Speichereinteilung von euch hoeren und wie man das am Besten macht. Im 
Linker definiert man ja die SECTIONS. Wie man in ASM den Code in 
Speicher aufteilt weiss ich, aber wie macht man das in C (in CCS)? z.B. 
kann die ganze Boardinitialisation vom L2 starten, aber die main 
Funktion soll vom L1 (L1P) starten. Damit laeuft der Code schneller, 
richtig?
Das gilt genauso fuer meine Arrays, z.B. sollen einige auf L1D plaziert 
werden.
Ist es grundsaetzlich ratsam und besser (schneller) wenn man den Code 
und Arrays aufteilt in verschiedene Caches? Und wie macht man das am 
besten.

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.