Forum: Mikrocontroller und Digitale Elektronik Bester Compiler für MSP430?


von nobody0 (Gast)


Lesenswert?

Mit dem IAR Embedded Workbench (aktuelle Vollversion 1.26 mit Dongle, 
Handbüchern usw.) habe ich einige Probleme wie das manchmal noch 2 kB an 
Daten verwendet werden können und manchmal nicht einmal 200 B; und bei 
einer Funktion habe ich das Phänomen, das wenn ich einige überflüssige 
(weil nicht verwendete) Wertzuweisungen auskommentiere, dies zu einem 
Absturz führt.
Das Löschen vom Release-Verzeichnis vor jedem Compilieren hilft auch 
kaum weiter, so das ich etwas besseres für MSP430 F149 suche.

Kann mir jemand etwas besseres empfehlen oder zumindest mal kurz 
schreiben was für Erfahrungen es mit Alternativen wie GCC Toolchain 
gibt?

von Lanius (Gast)


Lesenswert?

Ich benutze MSP430GCC/Ultraedit und C-Spy zum flashen und bin eigentlich 
zufrieden damit...

von Jens Stolinski (Gast)


Lesenswert?

Hallo,

ich benutze seit ungefähr einem Jahr den angesprochenen C-Compiler von 
der Firma IAR, "IAR Embedded Workbench". Die geschilderten Fehler traten 
bei mir in dieser langen Zeit noch nicht auf. Wenn bei der Aktivierung 
des Dongle alles richtig verlaufen ist und die Einstellungen unter 
"Project" -> "Options..." richtig sind, dürfte es eigentlich keine 
nennenswerten Probleme geben. Einen besseren C-Compiler zu finden, der 
den gleichen Funktionsumpfang hat dürfte sehr schwierig sein.

Bis dann Jens
www.SynaSys.de

von nobody0 (Gast)


Lesenswert?

Zur Erläuterung: ich arbeite an einem alten Projekt weiter, von dem ich 
alle Optionen übernommen habe (bis auf die Pfade, die ich anpassen 
musste).

Konkret ist das Problem mit dem Absturz folgender Code in einer 
Switch-Anweisung:

    case 4:
      newsample = ADC12MEM1;
      goto CCommon;
    case 5:
      newsample = ADC12MEM2;
      goto CCommon;
    case 7:
      newsample = ADC12MEM4;
      goto CCommon;
    case 8:
      newsample = ADC12MEM5;
      goto CCommon;
    case 10:
      newsample = ADC12MEM7;
      goto CCommon;
    case 11:
      newsample = ADC12MEM8;
      goto CCommon;
    case 13:
      newsample = ADC12MEM10;
      goto CCommon;
    case 14:
      newsample = ADC12MEM11;
 CCommon:
      break;


Die Variable newsample wird anschließend nicht verwendet, so das deshalb
dieser Code durch den folgenden ersetzt wurde, in dem die goto-Anweisung
durch break ersetzt ("ingelined") wurde:


   case 4:
      break;
    case 5:
      break;
    case 7:
    case 7:
      break;
    case 8:
      break;
    case 10:
      break;
    case 11:
      break;
    case 13:
      break;
    case 14:
      break;


Obwohl sich dadurch außer der Codegröße nichts ändern sollte stürzt der
Code jedoch reproduzierbar ab und das anscheinend schon bei der ersten
Ausführung.

Dazu kommt noch das CSpy manchmal nicht will; zu ca. 10% kommt meist 
"Target not found" und manchmal hilft dann nur ein Reset (des MC).
Ausserdem ist es so, dass das >>2, das ich zum schnellen Teilen durch 4 
verwende, manchmal korrekt ausgeführt wird und manchmal (bzw. nur an 
manchen Stellen im Code, auch wenn immer gleiche Datentypen verwendet 
werden) nicht.

Sieht so aus, als müsste ich auf mspgcc umsteigen.

Gibt es hier Interessenten für eine IAR Embedded Workbench Vollversion 
mit Dongle, Update (auf Vers. 1.26)?

von Peter D. (peda)


Lesenswert?

Ich glaube kaum, daß Dir ein anderer Compiler die Arbeit abnehmen kann, 
die Stelle zu suchen, wo der Fehler sitzt.

Aus meiner Erfahrung liegen Abstürze selten an dem Code, den man neu 
hinzugefügt hat und als den Schuldigen vermutet. Sondern es sind die 
Routinen, die man als absolut bombensicher einstuft und als letzte 
verdächtigt.

Wenn Du allerdings vermutest, daß wirklich der Compiler den Mist baut, 
dann schau doch einfach im erzeugten Assemblerlisting nach, ob der Code 
stimmt.


Peter

von Jens Stolinski (Gast)


Lesenswert?

Hallo,

ich glaube an dieser Stelle währe eine kleine Einführung in C 
erforderlich. Also die "switch case"-Anweisung in Verbindung mit einer 
"goto"-Anweisung einfach unverzeilich. Zum ersten generell in C ohne 
irgendwelche Sprünge arbeiten, C ist eine Hochsprache die im gegensatz 
zu ASM ohne "goto" auskommt !!!

Zum zweiten, so sieht die "switch case"-Anweisung richtig aus:

switch (value)
{
case  1: /* ... tue etwas ...*/ break;
case  2: /* ... tue etwas ...*/ break;
/*...*/
default: /* ... tue etwas ...*/ break;
}

Ohne Dir nahe zuteten, wenn der gesamte Quellcode so aussieht, dann 
wirst Du keinen richtigen C-Compiler für Deine Zwecke finden.
Im Internet befinden sich sehr viele gute Scripte zum Thema C (z.B. 
unter www.netzmafia.de).

Wieviel soll die IAR Embedded Workbench Vollversion mit Dongle, Update 
(auf Vers. 1.26) kosten (Info bitte per Email)?

Bis dann Jens
www.SynaSys.com

von nobody0 (Gast)


Lesenswert?

Also der Code stammt nicht von mir und das goto wollte ich ja 
rausnehmen. Mit dem goto läuft es problemlos, wenn ich es rausnehme (mit 
den ungenutzten cases) hängt der MC, wenn ich es wieder reinsetze läuft 
es wieder usw.. Das ist also reproduzierbar und definitiv dieser Code 
(die beiden obigen Abschnitte), denn sonst habe ich nichts geändert!
Das habe ich auch an mehreren Tagen (u. reboots) ausprobiert und immer 
reproduzieren können.

In C programmiere ich seit über 10 Jahren und mit dem gcc habe ich u. a. 
Kernel-Space-Gerätetreiber geschrieben, so das das nicht das Problem 
ist.
Als Preis dachte ich an ungefähr 1000 EUR, aber das ist noch kein 
Angebot, denn erstmal muss ich sehen ob  das Projekt nach Portierung auf 
MSP430GCC richtig funktioniert und ob mein Chef das freigibt.

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.