Forum: Mikrocontroller und Digitale Elektronik MSP430, IAR Warnung


von Eltman (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Eltman (Gast)


Lesenswert?

@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

von Johnny (Gast)


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.

von Egon (Gast)


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.

von szimmi (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.