Forum: Digitale Signalverarbeitung / DSP / Machine Learning RAM Speicher zu klein?[TMS320F28016]


von jury_DD (Gast)


Lesenswert?

Hallo,

ich schreibe gerade an meiner Studienarbeit und nutze dabei den DSP 
TMS320F28016 von Texas Instruments auf einem eva-board von Olimex 
(TMS320-P28016 ist der name des boards).

Ich habe nun alle benötigten Peripherien in Betrieb genommen und auch 
erfolgreich. Dachte ich zumindest. Denn als ich meine Teilprogramme 
zusammengeführt habe, passt auf einmal der Code nicht mehr in den RAM. 
Dieser ist allerdings 12kB groß und mein Programm kann eigtl. nix ausser 
initialisieren und ein bisschen idlen.

Wenn ich mir den Disassembly Code anschaue, dann belegt der von mir 
geschriebene Teil die Adressen 0x08000 .... 0x08200

Der RAM geht allerdings bis 0x09000. die restlichen Adressen zwischen 
meinem Code und dem RAM-Ende sind voll mit Befehlen, denen kein 
Source-Code zugeordnet werden kann durch das Code Composer Studio. Und 
dazwischen immer mal versplittert die ein oder andere Funktion aus den 
Headerfiles von TI.

Die Code-Start-Marke c_int00 liegt verwunderlicherweise auf Adresse 
0x8676 und der unterste Bereich zwischen 0x8748 und 0x9000 ist mit 
_etext bezeichnet, was mir (und google) überhaupt nichts sagt.

Hat jemand schon mal das selbe (oder ein ähnliches) Problem gehabt und 
eine Lösung parat?

Wie könnte ich denn dafür sorgen, dass wirklich nur der Code im RAM 
liegt, den ich geschrieben habe und die eingebundenen Headerfiles direkt 
dahinter?

Hoffentliche könnt ihr mir helfen.

Liebe Grüße, Andreas

von Leo (Gast)


Lesenswert?

Je nach Anwendung macht es öfters Sinn, die Initialisierungen direkt vom 
Flash auszuführen, wie auch Funktionen die selten benutzt werden. Sollte 
der ganze Code zeit unkritisch sein, dann ist es kein Problem den 
kompletten Code direkt aus dem Flash auszuführen.

von Jan (Gast)


Lesenswert?

Wie sieht denn das MAP-File aus?

Gruss, Jan

von jury_DD (Gast)


Lesenswert?

@Leo:

wie kann ich denn sicherstellen, dass bestimmte Teile meines Programms 
in den Flash geschrieben werden und andere in den RAM? Ich habe von TI 
ein Linker-command-file, welches den Source-Code in den RAM schreibt und 
ein cmd-file für die ausführung aus dem Flash.

@Jan:

was ist ein Map-file und wie kann ich einsehen? Meinst du die Memory Map 
des DSP?

von Leo (Gast)


Lesenswert?

Als Beispiel:

Im Linker unter Page 0 steht folgende Code-Zeile:
1
   FLASHA      : origin = 0x3F6000, length = 0x001F80     /* on-chip FLASH */

Sections verweist dann auf diesen Adressbereich und gibt dem ganzen 
einen Namen:
1
.init: > FLASHD      PAGE = 0  /* Intitialisierungen  */

Mittels pragma weist man nun die Funktion den Speicherbereich in der 
betreffenden C Datei zu:
1
#pragma CODE_SECTION(init_SCI, ".init")
2
3
4
void init_SCI()
5
{
6
}

Ein wenig kurz erklärt, aber vielleicht hilft es ein wenig.

von Jan (Gast)


Lesenswert?

Im Map-File wird die Speicheraufteilung entsprechend Deiner 
Projekt-Konfiguration (Linker-Command-File) aufgezeigt. Hier zeigt sich 
welcher Speicherbereich voll ist oder ob's noch Luecken gibt.

Unter "Project" => "Build Options..." wählst Du den Reiter "Linker" aus. 
In der Category "Basic" findest Du den Eintrag "Map Filename (-m)". Hier 
kannst Du den Namen des Map-Files, das der Linker erstellen soll, 
festlegen (bei CCS 3.3).

Gruss, Jan

P.S.: Das Thema gab's schonmal:
Beitrag "Zu wenig RAM bei Debuggen (TMS320F2808) - was tun?"

von jury_DD (Gast)


Lesenswert?

Danke für die Antworten!

Ich habe den Code jetzt in den Flash geladen. Schnell auszuführende 
Code-Schnipsel habe ich zur Laufzeit in den RAM geladen.

Nun passt wieder alles und es kann weiter gehen mit der 
Programm-entwicklung :)

Danke!

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.