mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Zu wenig RAM bei Debuggen (TMS320F2808) - was tun?


Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,
Ich arbeite jetzt seit ein paar Wochen mit dem TMS320F2808 und den 
JTAG-Adapter von Olimex.
Das Programm wird immer größer und es kommt wohl das Problem auf, dass 
ich zu wenig RAM habe um beim Debuggen das Programm zu speichern.
>>   error: can't allocate IQmath, size 00000099 (page 0) in PRAMH0 (avail:
            00000070)
Ich habe schon etwas DRAM0 Speicher für PRAM0 benutzt... aber auch da 
werde ich schnell an die grenze kommen.

Bisheriger Stand:
PRAMH0     : origin = 0x3FA000, length = 0x001000 
DRAMH0     : origin = 0x3FB000, length = 0x001000         

Laut Memory Map geht der Speicher bei 0x3F8000 los - warum schlägt das 
Programm-Laden fehl, wenn ich folgendes mache:
PRAMH0     : origin = 0x3F8000, length = 0x003000  
DRAMH0     : origin = 0x3FB000, length = 0x001000         

Hat jemand eine andere Lösung, um an mehr Speicher zu kommen?

MfG Alex

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sieh dir mal das *.map-File an - dort sind ein paar Infos zur 
Speicherbelegung zu finden. Vielleicht hilft dir das. Ansonsten musst du 
hier mehr Infos rausrücken.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Micha,
Die Map hilft mir momentan nicht wirklich - da steht ja nur welche Teile 
vom Compiler/Linker/... an welche Position gekommen sind.

Welche Infos brauchst du denn um mir weiterhelfen zu können?

MfG Alex

Autor: Tim R. (mugen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alex wrote:
> Moin,
> Ich arbeite jetzt seit ein paar Wochen mit dem TMS320F2808 und den
> JTAG-Adapter von Olimex.

Hi!  Ist es schon der USB Adapter? Würde gerne wissen wie gut die USB 
Lösung von Olimex ist.

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tach auch !!!

> Die Map hilft mir momentan nicht wirklich - da steht ja nur welche Teile
> vom Compiler/Linker/... an welche Position gekommen sind.

Im ersten Teil der Memory-Map steht aber schon, von welchem Block 
wieviel Speicher verbraten wurde. Entsprechend kann man das 
"Linker-Command-File" anpassen. Es gibt neben den Sektionen "L0", "L1" 
"H0" auch noch die Bereiche "M0" und "M1". Verwendest Du die?

Wie sieht denn Dein "Linker-Command-File" aus?

Gruss
Jan

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,
@ Tim R.: es ist der Parallel
@all
Ich benutze eine leicht veränderte CMD File die bei irgendeinem 
Sample-Projekt dabei war.
M0 und M1 benutze ich meines Wissens noch nicht, aber da schaue ich 
gleich mal nach.

CMD:
MEMORY
{
PAGE 0 :
   /* For this example, H0 is split between PAGE 0 and PAGE 1 */  
   /* BEGIN is used for the "boot to SARAM" bootloader mode   */
   
   BEGIN      : origin = 0x000000, length = 0x000002             
   RAMM0      : origin = 0x000002, length = 0x0003FE
   RAML0      : origin = 0x008000, length = 0x001000    
/*  PRAMH0     : origin = 0x3FA000, length = 0x001000 */
   PRAMH0     : origin = 0x3FA000, length = 0x001200 
   RESET      : origin = 0x3FFFC0, length = 0x000002
   BOOTROM    : origin = 0x3FF000, length = 0x000FC0               

         
PAGE 1 : 

   /* For this example, H0 is split between PAGE 0 and PAGE 1 */
   BOOT_RSVD   : origin = 0x000400, length = 0x000080     /* Part of M1, BOOT rom will use this for stack */
   RAMM1       : origin = 0x000480, length = 0x000380     /* on-chip RAM block M1 */
//   DRAMH0      : origin = 0x3FB200, length = 0x000800         
   DRAMH0      : origin = 0x3FB000, length = 0x001000         
}
 
 
SECTIONS
{
   /* Setup for "boot to SARAM" mode: 
      The codestart section (found in DSP28_CodeStartBranch.asm)
      re-directs execution to the start of user code.  */
   codestart        : > BEGIN,     PAGE = 0
   ramfuncs         : > RAMM0      PAGE = 0  
   .text            : > PRAMH0,    PAGE = 0
   .cinit           : > RAMM0,     PAGE = 0
   .pinit           : > RAMM0,     PAGE = 0
   .switch          : > RAMM0,     PAGE = 0
   .reset           : > RESET,     PAGE = 0, TYPE = DSECT /* not used, */
   
   .stack           : > RAMM1,     PAGE = 1
   .ebss            : > DRAMH0,    PAGE = 1
   .econst          : > DRAMH0,    PAGE = 1      
   .esysmem         : > RAMM1,     PAGE = 1

   IQmath           : >  PRAMH0,   PAGE = 0
   IQmathTables     : >  BOOTROM, type = NOLOAD, PAGE = 0

     
}


MAP:
PAGE  0: BEGIN                   00000000   00000002  00000002  RWIX
         RAMM0                   00000002   000003fe  0000017a  RWIX
         RAML0                   00008000   00001000  00000000  RWIX
         PRAMH0                  003fa000   00001200  00001092  RWIX
         BOOTROM                 003ff000   00000fc0  00000b50  RWIX
         RESET                   003fffc0   00000002  00000000  RWIX

PAGE  1: BOOT_RSVD               00000400   00000080  00000000  RWIX
         RAMM1                   00000480   00000380  00000200  RWIX
         DEV_EMU                 00000880   00000180  000000d0  RWIX
         FLASH_REGS              00000a80   00000060  00000008  RWIX
         CSM                     00000ae0   00000010  00000010  RWIX
         ADC_MIRROR              00000b00   00000010  00000010  RWIX
         CPU_TIMER0              00000c00   00000008  00000008  RWIX
         CPU_TIMER1              00000c08   00000008  00000008  RWIX
         CPU_TIMER2              00000c10   00000008  00000008  RWIX
         PIE_CTRL                00000ce0   00000020  0000001a  RWIX
         PIE_VECT                00000d00   00000100  00000100  RWIX
         ECANA                   00006000   00000040  00000034  RWIX
         ECANA_LAM               00006040   00000040  00000040  RWIX
         ECANA_MOTS              00006080   00000040  00000040  RWIX
         ECANA_MOTO              000060c0   00000040  00000040  RWIX
         ECANA_MBOX              00006100   00000100  00000100  RWIX
         ECANB                   00006200   00000040  00000034  RWIX
         ECANB_LAM               00006240   00000040  00000040  RWIX
         ECANB_MOTS              00006280   00000040  00000040  RWIX
         ECANB_MOTO              000062c0   00000040  00000040  RWIX
         ECANB_MBOX              00006300   00000100  00000100  RWIX
         EPWM1                   00006800   00000022  00000022  RWIX
         EPWM2                   00006840   00000022  00000022  RWIX
         EPWM3                   00006880   00000022  00000022  RWIX
         EPWM4                   000068c0   00000022  00000022  RWIX
         EPWM5                   00006900   00000022  00000022  RWIX
         EPWM6                   00006940   00000022  00000022  RWIX
         ECAP1                   00006a00   00000020  00000020  RWIX
         ECAP2                   00006a20   00000020  00000020  RWIX
         ECAP3                   00006a40   00000020  00000020  RWIX
         ECAP4                   00006a60   00000020  00000020  RWIX
         EQEP1                   00006b00   00000040  00000040  RWIX
         EQEP2                   00006b40   00000040  00000040  RWIX
         GPIOCTRL                00006f80   00000040  00000040  RWIX
         GPIODAT                 00006fc0   00000020  00000020  RWIX
         GPIOINT                 00006fe0   00000020  0000000a  RWIX
         SYSTEM                  00007010   00000020  00000020  RWIX
         SPIA                    00007040   00000010  00000010  RWIX
         SCIA                    00007050   00000010  00000010  RWIX
         XINTRUPT                00007070   00000010  00000010  RWIX
         ADC                     00007100   00000020  0000001e  RWIX
         SPIB                    00007740   00000010  00000010  RWIX
         SCIB                    00007750   00000010  00000010  RWIX
         SPIC                    00007760   00000010  00000010  RWIX
         SPID                    00007780   00000010  00000010  RWIX
         I2CA                    00007900   00000040  00000022  RWIX
         CSM_PWL                 003f7ff8   00000008  00000008  RWIX
         DRAMH0                  003fb200   00000800  00000704  RWIX

MfG Alex

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst mal das *.cmd-File von hier 
http://focus.ti.com/general/docs/techdocsabstract.... 
nehmen und modifizieren. Vielleicht hilft dir das weiter.

Das erleichtert dir später auch das Speichern ins Flash, weil du dann 
einfach das andere *.cmd-File nehmen kannst.

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also mir fällt da folgendes auf:

1.) Warum sind die Speicherbereiche mal mit Adressen vom unteren und mal 
vom oberen Bereich angelegt (verwirrt doch nur)? Den RAM-Speicher gibt's 
nämlich nur einmal. Er hat nur aus Kompatibilätsgründen mit der 
24xx-Reihe zwei Zugriffsadressen gekriegt (ich verwende eigentlich immer 
die unteren Adressen).

2.) Es macht eigentlich keinen Sinn so viele verschiedene 
Speicherbereiche anzulegen. So legst Du z.B. einen Bereich "RAML0" an 
(1000h = 4096dez), den Du überhaupt nicht verwendest. Dir scheint der 
Mechanismus nicht ganz klar zu sein: Erst werden die Speicherbereiche 
festgelegt (entsprechend der DSP-Memory-Map) dann werden die Sektionen 
den verschiedenen Speicherbereichen zugewiesen (hierzu gibt's diverse 
TI-AN).

3.) Meines Wissens funktioniert "//" beim Linker-Commend-File nicht zum 
Auskommentieren. Man muss "/* ... */" verwenden.


Auf die Schnelle sollten Dir folgenden Änderungen weiterhelfen:

 PAGE 0 :
   /* RAML0      : origin = 0x008000, length = 0x001000 */
   PRAMH0     : origin = 0x00A000, length = 0x002000

 PAGE 1 :
   /* //   DRAMH0      : origin = 0x3FB200, length = 0x000800 */
   /* DRAMH0      : origin = 0x3FB000, length = 0x001000 */
   DRAMH0      : origin = 0x008000, length = 0x001000


Gruss
Jan

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,
@Micha: Das muss ich mir erst genauer ansehen... auf den ersten Blick 
habe ich da nur Flash Sachen gesehen.

@Jan: Das hilft mir wirklich schonmal weiter :-). Wie gesagt... ich 
hatte die Datei bisher von eiem Example Projekt kopiert und mir keine 
Gedanken darüber gemacht.
Mit 8kB Speicher sollte ich erstmal eine Weile hinkommen :-).


Vielen Dank an Alle :-)
MfG Alex

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.