Problem Switch case 8051 µvision

Gast #2404634
Lesenswert?

Hallo, hab meinen c Quelltext mal angehangen.

Nutze SAB80517A und yvision4.

Das Problem ist, das wenn ich im Schrittmodus den Quelltext abarbeite 
case 1 übersprungen wird, also er landet sofort beim break und spring 
dann (warum auch immer) in die case 3.

Im Headerfile sind Ampelphasen definiert in der Form:

#define Rot_Rot         P5=0x09; P3&=0xFB
#define Rot_RotGelb    P5=0x0B
...

Ich verstehe nicht, weshalb case 0,2,3 funktionieren, aber die 1 nicht.

Jemand ne Idee?
Angehängte Dateien:
Gast #2405189
Lesenswert?

> Wahrscheinlich optimiert der Compiler die case-1-Sequenz weg, da sie
> kommplett im case-3-Code enthalten ist.
Das würde man daran erkennen, dass zwar in den 3er-Zweig gesprungen 
wird, dieser aber "mittendrin" abgearbeitet wird. Ausserdem müsste 
soweit ich weiss in dem Fall die Sequenz aus 1 mit dem letzten Teil aus 
3 identisch sein, danach müsste direkt das break und nichts anderes mehr 
kommen. Das würde hier ja zutreffen.

Funktioniert denn das "Problem"? =)

Ralf
#2405694
Lesenswert?

Ich hab das Programm eben compiliert und das scheinbare "Problem" kommt 
durch die Optimierung des Compilers zustande. Er referenziert die 
identischen Zeilen an nur einer Stelle, anstatt es jedesmal erneut zu 
behalten. Es ist also alles völlig korrekt. Nur im Debug Modus springt 
er eben über die Zeilen hinweg, was etwas verwirrend ist.

Wenn du die Optimierungsstufe von 8 (default) auf 7 herabsetzt wird der 
Code nicht mehr wiederverwendet und an jeder Stelle behalten. Dann 
springt er auch nicht mehr über die Zeilen hinweg, aber der Code wird 
ein gutes Stück größer.

Ciao,
     Rainer

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