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?
Sorry, Nachtrag: meine natürlich die 2. switch(j) case anweisung wo der delay funktionsaufruf immer mit drin ist. Gruß
Wahrscheinlich optimiert der Compiler die case-1-Sequenz weg, da sie kommplett im case-3-Code enthalten ist. Ciao, Yagan
> 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
Poste mal deine Header Datei. Dann kann ich es hier selber mal testen. Wobei ich tendenziell schon die Compiler Optimierung im Verdacht habe. Ciao, Rainer
also er scheint tatsächlich an die stelle zu springen ab der case 3 case 1 entspricht... kann es leider im mom. nich in der praxis teste.
HELP schrieb: > also er scheint tatsächlich an die stelle zu springen ab der case 3 case > 1 entspricht... Compiler dürfen nicht nur optimieren, sondern sie sollen es auch. Schau doch mal ins Assemblerlisting. Peter
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.