MSP430, IAR Warnung

Gast #350349
Lesenswert?

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
Persönliche Seite #350350
Lesenswert?

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.
Gast #350352
Lesenswert?

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.
Gast #350353
Lesenswert?

""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.

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