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


von Alex (Gast)


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.
1
>>   error: can't allocate IQmath, size 00000099 (page 0) in PRAMH0 (avail:
2
            00000070)
Ich habe schon etwas DRAM0 Speicher für PRAM0 benutzt... aber auch da 
werde ich schnell an die grenze kommen.

Bisheriger Stand:
1
PRAMH0     : origin = 0x3FA000, length = 0x001000 
2
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:
1
PRAMH0     : origin = 0x3F8000, length = 0x003000  
2
DRAMH0     : origin = 0x3FB000, length = 0x001000

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

MfG Alex

von Micha (Gast)


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.

von Alex (Gast)


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

von Tim R. (mugen)


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.

von Jan (Gast)


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

von Alex (Gast)


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:
1
MEMORY
2
{
3
PAGE 0 :
4
   /* For this example, H0 is split between PAGE 0 and PAGE 1 */  
5
   /* BEGIN is used for the "boot to SARAM" bootloader mode   */
6
   
7
   BEGIN      : origin = 0x000000, length = 0x000002             
8
   RAMM0      : origin = 0x000002, length = 0x0003FE
9
   RAML0      : origin = 0x008000, length = 0x001000    
10
/*  PRAMH0     : origin = 0x3FA000, length = 0x001000 */
11
   PRAMH0     : origin = 0x3FA000, length = 0x001200 
12
   RESET      : origin = 0x3FFFC0, length = 0x000002
13
   BOOTROM    : origin = 0x3FF000, length = 0x000FC0               
14
15
         
16
PAGE 1 : 
17
18
   /* For this example, H0 is split between PAGE 0 and PAGE 1 */
19
   BOOT_RSVD   : origin = 0x000400, length = 0x000080     /* Part of M1, BOOT rom will use this for stack */
20
   RAMM1       : origin = 0x000480, length = 0x000380     /* on-chip RAM block M1 */
21
//   DRAMH0      : origin = 0x3FB200, length = 0x000800         
22
   DRAMH0      : origin = 0x3FB000, length = 0x001000         
23
}
24
 
25
 
26
SECTIONS
27
{
28
   /* Setup for "boot to SARAM" mode: 
29
      The codestart section (found in DSP28_CodeStartBranch.asm)
30
      re-directs execution to the start of user code.  */
31
   codestart        : > BEGIN,     PAGE = 0
32
   ramfuncs         : > RAMM0      PAGE = 0  
33
   .text            : > PRAMH0,    PAGE = 0
34
   .cinit           : > RAMM0,     PAGE = 0
35
   .pinit           : > RAMM0,     PAGE = 0
36
   .switch          : > RAMM0,     PAGE = 0
37
   .reset           : > RESET,     PAGE = 0, TYPE = DSECT /* not used, */
38
   
39
   .stack           : > RAMM1,     PAGE = 1
40
   .ebss            : > DRAMH0,    PAGE = 1
41
   .econst          : > DRAMH0,    PAGE = 1      
42
   .esysmem         : > RAMM1,     PAGE = 1
43
44
   IQmath           : >  PRAMH0,   PAGE = 0
45
   IQmathTables     : >  BOOTROM, type = NOLOAD, PAGE = 0
46
47
     
48
}


MAP:
1
PAGE  0: BEGIN                   00000000   00000002  00000002  RWIX
2
         RAMM0                   00000002   000003fe  0000017a  RWIX
3
         RAML0                   00008000   00001000  00000000  RWIX
4
         PRAMH0                  003fa000   00001200  00001092  RWIX
5
         BOOTROM                 003ff000   00000fc0  00000b50  RWIX
6
         RESET                   003fffc0   00000002  00000000  RWIX
7
8
PAGE  1: BOOT_RSVD               00000400   00000080  00000000  RWIX
9
         RAMM1                   00000480   00000380  00000200  RWIX
10
         DEV_EMU                 00000880   00000180  000000d0  RWIX
11
         FLASH_REGS              00000a80   00000060  00000008  RWIX
12
         CSM                     00000ae0   00000010  00000010  RWIX
13
         ADC_MIRROR              00000b00   00000010  00000010  RWIX
14
         CPU_TIMER0              00000c00   00000008  00000008  RWIX
15
         CPU_TIMER1              00000c08   00000008  00000008  RWIX
16
         CPU_TIMER2              00000c10   00000008  00000008  RWIX
17
         PIE_CTRL                00000ce0   00000020  0000001a  RWIX
18
         PIE_VECT                00000d00   00000100  00000100  RWIX
19
         ECANA                   00006000   00000040  00000034  RWIX
20
         ECANA_LAM               00006040   00000040  00000040  RWIX
21
         ECANA_MOTS              00006080   00000040  00000040  RWIX
22
         ECANA_MOTO              000060c0   00000040  00000040  RWIX
23
         ECANA_MBOX              00006100   00000100  00000100  RWIX
24
         ECANB                   00006200   00000040  00000034  RWIX
25
         ECANB_LAM               00006240   00000040  00000040  RWIX
26
         ECANB_MOTS              00006280   00000040  00000040  RWIX
27
         ECANB_MOTO              000062c0   00000040  00000040  RWIX
28
         ECANB_MBOX              00006300   00000100  00000100  RWIX
29
         EPWM1                   00006800   00000022  00000022  RWIX
30
         EPWM2                   00006840   00000022  00000022  RWIX
31
         EPWM3                   00006880   00000022  00000022  RWIX
32
         EPWM4                   000068c0   00000022  00000022  RWIX
33
         EPWM5                   00006900   00000022  00000022  RWIX
34
         EPWM6                   00006940   00000022  00000022  RWIX
35
         ECAP1                   00006a00   00000020  00000020  RWIX
36
         ECAP2                   00006a20   00000020  00000020  RWIX
37
         ECAP3                   00006a40   00000020  00000020  RWIX
38
         ECAP4                   00006a60   00000020  00000020  RWIX
39
         EQEP1                   00006b00   00000040  00000040  RWIX
40
         EQEP2                   00006b40   00000040  00000040  RWIX
41
         GPIOCTRL                00006f80   00000040  00000040  RWIX
42
         GPIODAT                 00006fc0   00000020  00000020  RWIX
43
         GPIOINT                 00006fe0   00000020  0000000a  RWIX
44
         SYSTEM                  00007010   00000020  00000020  RWIX
45
         SPIA                    00007040   00000010  00000010  RWIX
46
         SCIA                    00007050   00000010  00000010  RWIX
47
         XINTRUPT                00007070   00000010  00000010  RWIX
48
         ADC                     00007100   00000020  0000001e  RWIX
49
         SPIB                    00007740   00000010  00000010  RWIX
50
         SCIB                    00007750   00000010  00000010  RWIX
51
         SPIC                    00007760   00000010  00000010  RWIX
52
         SPID                    00007780   00000010  00000010  RWIX
53
         I2CA                    00007900   00000040  00000022  RWIX
54
         CSM_PWL                 003f7ff8   00000008  00000008  RWIX
55
         DRAMH0                  003fb200   00000800  00000704  RWIX

MfG Alex

von Micha (Gast)


Lesenswert?

Du kannst mal das *.cmd-File von hier 
http://focus.ti.com/general/docs/techdocsabstract.tsp?abstractName=spra958h 
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.

von Jan (Gast)


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

von Alex (Gast)


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

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.