MSPGCC Fehler im CCS 6.0

#3732347
Lesenswert?

Hallo zusammen,

ich habe die mspgcc toolchain installiert und verwende das Code Composer 
Studio 6.0. Als Testplattform verwende ich das MSP-EXP430G2 Launchpad 
mit dem MSP430G2231.

Wenn ich den TI Compiler wähle, der beim CCS dabei ist, funktionieren 
die Beispielprogramme für diesen uC problemlos. Wenn ich aber den GNU 
v4.8.0 (Red Hat) Compiler auswähle, kommt beim Build folgende 
Fehlermeldung:
1
error: ./main.o uses MSP430 instructions but c:/ti/ccsv6/tools/compiler/gcc_msp430_4.8.371/bin/../lib/gcc/msp430-elf/4.8.0/../../../../msp430-elf/lib/crt0.o uses MSP430X

Diesen Fehler konnte ich beheben, in dem ich die Target MCU (-mmcu) von 
"msp430" auf "msp430g2231" änderte.
Beim nächsten Build erscheinen dann andere Fehler:
1
LaunchTest.out section `.bss' will not fit in region `RAM'  
2
region `RAM' overflowed by 16 bytes  
3
gmake: *** [LaunchTest.out] Error 1  
4
gmake: Target `all' not remade because of errors.

Ich habe am Beispiel-Programm nichts geändert, sondern nur den Compiler 
geändert. Wenn ich eine ältere Version des gcc auswähle (GNU v4.6.3) 
kommen folgende Fehler:
1
error: no memory region specified for loadable section `.vectors'  
2
gmake: *** [LaunchTest.out] Error 1
3
gmake: Target `all' not remade because of errors.  
4
"__interrupt" redefined [enabled by default]  LaunchTest    line 72, external location: C:\TI\ccsv6\ccs_base\msp430\include_gcc\iomacros.h

Ich weiß absolut nicht mehr weiter, kann mir hier vielleicht jemand 
weiterhelfen?

Grüße,
Andí
Gast #3732605
Lesenswert?

A. Brewner schrieb:
> Diesen Fehler konnte ich beheben, in dem ich die Target MCU (-mmcu) von
> "msp430" auf "msp430g2231" änderte.
> Beim nächsten Build erscheinen dann andere Fehler:
> LaunchTest.out section
> `.bss' will not fit in region `RAM'
> region `RAM' overflowed by 16 bytes
> gmake: *** [LaunchTest.out] Error 1
> gmake: Target `all' not remade because of errors.

Das hier könnte helfen:

http://forum.43oh.com/topic/5419-code-composer-studio-v6-now-officially-released/?p=47408
Gast #3732708
Lesenswert?

Zur ersten Fehlermeldung:
Es wurde Code mit dem Extended Befehlssatz generiert. Der passt nicht 
zum Controller. Mit der Auswahl des richtigen Target wurde das behoben.

Zur zweiten:
Das RAM hat bei den gewählten Projekt Einstellungen nicht gereicht. Du 
solltest das Linkersript mal prüfen.
#3733153
Lesenswert?

Ecki schrieb:
> Das hier könnte helfen:
> 
http://forum.43oh.com/topic/5419-code-composer-studio-v6-now-officially->released/?p=47408

Ich hab das _start.S File zum Projekt hinzugefügt, allerdings weiß ich 
nicht genau was mit "Note: You will also have to move the '*(COMMON)' 
line from the .noinit section to the .bss section in your linker script 
file." gemeint ist. Die besagten sections sehen im msp430g2231.ld linker 
file so aus:
1
.bss : {
2
    . = ALIGN(2);
3
    PROVIDE (__bssstart = .);
4
    *(.dynbss)
5
    *(.sbss .sbss.*)
6
    *(.bss .bss.* .gnu.linkonce.b.*)
7
    . = ALIGN(2);
8
    PROVIDE (__bssend = .);
9
    _end = .;
10
    PROVIDE (end = .);
11
  } > RAM
12
  PROVIDE (__bsssize = SIZEOF(.bss));
13

14
  .noinit : {
15
    . = ALIGN(2);
16
    PROVIDE (__noinit_start = .);
17
    *(.noinit)
18
    . = ALIGN(2);
19
    *(COMMON)
20
    PROVIDE (__noinit_end = .);
21
    end = .;
22
  } > RAM
Wo genau soll ich die '*(COMMON)' Zeile hin verschieben?

Ich erhalte nach wie vor folgende Fehlermeldungen: siehe Bild.

Als Device ist der MSP430G2231 eingestellt. In den 
Compiler-Einstellungen (CCS Build > GNU Compiler > Runtime) ist 
standardmäßig unter -mcpu nichts eingetragen und unter -mmcu msp430. 
Wenn ich bei -mcpu 430 eintrage, bleiben noch vier Fehler:
1
region `RESETVEC' overflowed by 2 bytes       
2
gmake: *** [msp430g2xx1_1.out] Error 1       
3
msp430g2xx1_1.out section `__reset_vector' will not fit in region `RESETVEC'  
4
gmake: Target `all' not remade because of errors.

Im mspgcc manual 
http://mspgcc.sourceforge.net/manual/c745.html#compiler-options ist für 
die Option -mmcu "msp430" interessanterweise gar nicht vorhanden.

Wie gesagt, wenn ich einfach auf den TI compiler umschalte, funktioniert 
es problemlos. Der Speicher kann vom kleinen Programm unmöglich voll 
sein. Die Header-files sind auch die gleichen. Was kann den Speicher 
noch überfüllen?
#3733301
Lesenswert?

Die -msp430 Option ist für diese Uniarch Geschichte, das hab ich aber 
auch noch nicht vollständig durchschaut. Ich hab bei Compiler und Linker 
Optionen jeweils die vollständige Bezeichnung des MSP beim -mmcu 
Parameter drin, damit klappts. Bei einem neuen Projekt im CCE6 wird das 
nicht korrekt gesetzt.
#3733400
Lesenswert?

Hatte das schon mehrmals ohne Erfolg versucht, aber jetzt funktioniert 
es auf einmal. Hab mehrere Beispielprojekte ausprobiert. Beim GNU v4.8.0 
verwende ich jetzt folgende Einstellungen:

CCS Build > GNU Compiler > Runtime:
alles leer bis auf Target MCU: MSP430G2231

CCS General:
Variant: MSP430G2231
Linker Command file: msp430g2231.ld
Runtime support lib: libc.a

Damit funktioniert's! Vielen Dank für die Hilfe!

EDIT:
Hab gerade die Ursache für den RAM-overflow Fehler gefunden. Da verlässt 
man sich auf mitgelieferte Beispielprogramme und übersieht, dass am Ende 
des Hauptprogramms die while(1)-Schleife fehlt. Das gefällt dem 
gcc-compiler offensichtlich nicht. Bisher war am Ende immer nur
1
__bis_SR_register(LPM0_bits + GIE);
also Low-power-Mode 0 und Interrupts aktivieren. Ein einfaches while(1); 
danach und schon ist der gcc glücklich!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren