mikrocontroller.net

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


Autor: nobody0 (Gast)
Datum:

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

Autor: Lanius (Gast)
Datum:

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

Autor: Jens Stolinski (Gast)
Datum:

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

Autor: nobody0 (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Jens Stolinski (Gast)
Datum:

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

Autor: nobody0 (Gast)
Datum:

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

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.