RAM Speicher zu klein?[TMS320F28016]

Gast #1750046
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
Gast #1750490
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.
Gast #1750765
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?
Gast #1752741
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.
Gast #1753135
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?"
Gast #1770471
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!

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