www.mikrocontroller.net

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


Autor: Martin (Gast)
Datum:

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

-cmsp430

// RAM memory

-Z(DATA)DATA16_I,DATA16_Z,DATA16_N,HEAP+_HEAP_SIZE=0200-02FF
-Z(DATA)CSTACK+_STACK_SIZE#

//  Information memory (FLASH)

-Z(CODE)INFO=1000-10FF
-Z(CODE)INFOA=10C0-10FF
-Z(CODE)INFOB=1080-10BF
-Z(CODE)INFOC=1040-107F
-Z(CODE)INFOD=1000-103F

// ROM memory (FLASH)

//  Code

-Z(CODE)CSTART=F000-FFE3
-Z(CODE)CODE=F000-FFE3

// Constant data

-Z(CONST)DATA16_C,DATA16_ID,DIFUNCT,CHECKSUM=F000-FFE3

Autor: Christian R. (supachris)
Datum:

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

Autor: Stefan (Gast)
Datum:

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

Autor: Christian R. (supachris)
Datum:

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

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
-Z(DATA)DATA16_I,DATA16_Z,DATA16_N,HEAP+_HEAP_SIZE=0200-02FF
geändert zu
-Z(DATA)DATA16_I,DATA16_Z,DATA16_N,DATA16_HEAP+_DATA16_HEAP_SIZE=0200-02FF

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

Autor: Stefan (Gast)
Datum:

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

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank Stefan, das bringt mich weiter!

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

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

Autor: Stefan (Gast)
Datum:

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

Autor: Martin (Gast)
Datum:

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

Vielen Dank für deine Hilfe!

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.