Forum: Mikrocontroller und Digitale Elektronik MSP430 Fatal Error[e106]


von Martin (Gast)


Lesenswert?

Hallo!

Ich erhalte folgenden Fehler:

Fatal Error[e106]: Syntax error or bad argument in 
-Z(DATA)DATA16_I,DATA16_Z,DATA16_N,HEAP+_HEAP_SIZE=0200-02FF

Mein Setup:
- TI MSP430F2121
- IAR Embedded Workbench IDE

Kann mir jemand sagen, wo der Fehler in dieser Zeile liegt? Ich vermute, 
dass ein anderer Fehler Auswirkungen auf diese Zeile haben könnte. 
Deshalb post ich unten noch einen grösseren Ausschnitt aus dem Linker 
File.

Martin

1
-cmsp430
2
3
// RAM memory
4
5
-Z(DATA)DATA16_I,DATA16_Z,DATA16_N,HEAP+_HEAP_SIZE=0200-02FF
6
-Z(DATA)CSTACK+_STACK_SIZE#
7
8
//  Information memory (FLASH)
9
10
-Z(CODE)INFO=1000-10FF
11
-Z(CODE)INFOA=10C0-10FF
12
-Z(CODE)INFOB=1080-10BF
13
-Z(CODE)INFOC=1040-107F
14
-Z(CODE)INFOD=1000-103F
15
16
// ROM memory (FLASH)
17
18
//  Code
19
20
-Z(CODE)CSTART=F000-FFE3
21
-Z(CODE)CODE=F000-FFE3
22
23
// Constant data
24
25
-Z(CONST)DATA16_C,DATA16_ID,DIFUNCT,CHECKSUM=F000-FFE3

von Christian R. (supachris)


Lesenswert?

Wieso schreibst du in den Linker-Files rum? Normalerweise fasst man die 
nicht an, wenn man nicht gerade irgendwas ganz spezielles vorhat 
(Bootloader-Section oder sowas)...

von Stefan (Gast)


Lesenswert?

@Martin
Ein Vergleich mit den Linker-Files von IAR V4.20.1:
-Z(DATA)DATA16_I,DATA16_Z,DATA16_N,DATA16_HEAP+_DATA16_HEAP_SIZE=...

@Christian
Wieso soll man die nicht anfassen?
Das ist die normale Vorgehensweise um eigene Speicherbereiche zu 
definieren und dem Linker bekannt zu machen!
Selbstverständlich macht man eine Kopie des originalen Linker-Files und 
legt es im Projektordner ab und bindet es über Projekte->Files ein, 
fertig!

von Christian R. (supachris)


Lesenswert?

Sicher...nur man sollte nicht drin rum schreiben, ohne zu wissen, was 
man da macht, und sich dann über Fehlermeldungen wundern.

von Martin (Gast)


Lesenswert?

Vielen Dank für die Antworten.

@ Christian: Ich modifiziere einen "fremden" Code, der nicht von mir 
implementiert wurde. Es stimmt, dass ich mich mit der Speicherzuteilung 
nicht auskenne, aber falls ich das Problem nicht beheben kann, komme ich 
nicht weiter. Deswegen bin ich auch froh über Links zu erklärenden 
Seiten.

@ Antwort von Stefan:
Falls ich bei HEAP die DATA16 anhänke, verändert sich die Fehlermeldung. 
Ich weiss nicht, ob dies zur Problemlösung beiträgt, aber ich post mal 
die Änderung und die neue Fehlermeldung:
1
-Z(DATA)DATA16_I,DATA16_Z,DATA16_N,HEAP+_HEAP_SIZE=0200-02FF
geändert zu
1
-Z(DATA)DATA16_I,DATA16_Z,DATA16_N,DATA16_HEAP+_DATA16_HEAP_SIZE=0200-02FF

Fehlermeldung:
1
Error[e16]: Segment CSTACK (size: 0x30 align: 0x1) is too long for segment definition. At least 0x2 more bytes needed. The problem occurred while  
2
processing the segment placement command "-Z(DATA)CSTACK+_STACK_SIZE#", where at the moment of placement the available memory ranges  
3
were "CODE:2d2-2ff" 
4
   Reserved ranges relevant to this placement: 
5
   200-27f              DATA16_AN 
6
   280-28b              DATA16_Z 
7
   28c-2d1              DATA16_N 
8
   2d2-2ff              CSTACK

von Stefan (Gast)


Lesenswert?

Dein RAM Bedarf an Variablen, etc. beträgt 210 Bytes (0x200-2D1)
Damit bleiben dem Stack (der von oben befüllt wird) nur noch 46 Bytes 
übrig.
Du hast aber in Project->Options->General Options->Stack/Heap 
wahrscheinlich mind. 48 Bytes reserviert, was insgesamt eben nicht mehr 
in den verfügbaren RAM (256Byte) passt!

Du musst also erstens die Optionen für den Stack ändern und selbst 
sicherstellen, dass der Speicherbereich für den Stack auch ausreicht!!!
Ansonsten bleibt Dir nur die Möglichkeit anderweitig RAM einzusparen um 
mehr Platz für den Stack zu bekommen oder auf einen anderen MSP430 mit 
mehr RAM auszuweichen!

von Martin (Gast)


Lesenswert?

Vielen Dank Stefan, das bringt mich weiter!

Nun wird mir aber folgender Fehler angezeigt:
1
Error[e16]: Segment CODE (size: 0x112c align: 0x1) is too long for segment definition. At least 0x160 more bytes needed. The problem occurred while  
2
processing the segment placement command "-Z(CODE)CODE=F000-FFE3", where at the moment of placement the available memory ranges were  
3
"CODE:f018-ffe3"

Bedeutet dies, dass ich meinen Code kürzen muss?

von Stefan (Gast)


Lesenswert?

>Bedeutet dies, dass ich meinen Code kürzen muss?
Ja, sieht so aus!
Oder halt doch auf 'nen MSP mit mehr Flash/RAM umsteigen!
Vielleicht hast Du Glück und es gibt einen pinkompatiblen Ersatz in der 
Reihe, den Du gerade verwendest?!

von Martin (Gast)


Lesenswert?

Ok, vielen Dank, ich suche einen neuen MSP, weil der Code noch länger 
wird.

Vielen Dank für deine Hilfe!

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.