mikrocontroller.net

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


Autor: jury_DD (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie sieht denn das MAP-File aus?

Gruss, Jan

Autor: jury_DD (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Als Beispiel:

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

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

Mittels pragma weist man nun die Funktion den Speicherbereich in der 
betreffenden C Datei zu:
#pragma CODE_SECTION(init_SCI, ".init")


void init_SCI()
{
}


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

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?"

Autor: jury_DD (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.