www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430, IAR Warnung


Autor: Eltman (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Eltman (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Egon (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: szimmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.