Hallo beim compilieren mit IAR erhalte ich immer folgende Warnung: Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement der dazugehörige Code aus der ADC ISR: Mess_S1_ES1_Offset = (ADC12MEM0 + ADC12MEM2 + ADC12MEM4 + ADC12MEM6)/4; wie kann ich dem Compiler begreiflich machen das die Register (ADC12..) einen definieren Wert haben, denn wenn ich in die ADC ISR eintrete haben die Register den Wandlungswert. Gruß Eltman
Die Fehlermeldung besagt nicht, daß die Register keinen definierten wert hätten, sondern daß die Reihenfolge des Zugriffs nicht festgelegt ist. Um das zu vermeiden, solltest Du sowas schreiben: temp = ADC12MEM0; temp += ADC12MEM2; temp += ADC12MEM4; temp += ADC12MEM6; Mess_..Offset = temp / 4; Wenn Dir an dieser Stelle die Reiehenfolge des Zugriffs unwichtig ist, dann kannst Du - die Warnung ignorieren oder - herausfinden, wie man die Warnung gezielt unterdrücken kann. Bei einigen Compilern gibt es dafür eigene pragma-Anweisungen.
@Rufus Danke Hab jetzt im IAR die Einstellung auf nur Errors anzeigen gestellt, denn eine pragma Anweisung habe ich auf die Schnelle nicht gefunden. Eltman
Die Warnungen gänzlich auszuschalten ist vielleicht etwas weniger geschickt. Denn manchmal können sie sehr helfen, seltsamem Fehlern vorzubeugen. z.B. wenn mit verschiedenen Datentypen hantiert wird und dabei Daten verloren gehen können oder Variabeln gar nie benutzt werden..... Da sind die Hinweise des Compilers sehr nützlich. Wenn Du so machst wie Rufus schreibt, dann schreibst Du zwar ein wnig mehr, aber der compilierte Code sollte eigentlich nicht grösser werden.
""Hab jetzt im IAR die Einstellung auf nur Errors anzeigen gestellt, Nicht gut ! Als Beispiel: if(i = 1) ... gibt eine Warnung, weil ein == erwartet wird. Ohne diese Warnung kann man viele Probleme bekommen.
Kinder, ihr macht Sachen. Der Compiler schickt nicht ohne Grund Warnungen. Immer anlassen und den Dingen auf den Grund gehen. Rufus Vorschlag ist o.k.
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.