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?
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
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)?
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
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
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.