PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Schlüsselwort "volatile" und EEPROM



tommy1977
18.09.2010, 14:06
Hallo,

ich nutze AVR-Studio 4 mit WinAVR und programmiere einen ATmega644PA.

Vor dem Hauptprogramm habe ich folgenden Befehl:
"volatile unsigned int EEPROM fahrenmaxeep = 0;"

Im Hauptprogramm dann diese Anweisung:
"if(eeprom_read_word(&fahrenmaxeep) == 0)"

Diese Anweisung soll nur checken, ob schon Daten abgelegt wurden, oder ob das erst noch gemacht werden muss (also, wenn Inhalt == 0). Damit mir der Compiler die Anweisung nicht wegoptimiert, habe ich oben "volatile" angegeben. Beim kompilieren erhalte ich wegen dieser if-Anweisung folgende Warnung:

"warning: passing argument 1 of '__eerd_word_m644pa' discards qualifiers from pointer target type"

Weiss einer von euch vielleicht, warum der qualifier "volatile" in diesem Fall nicht beachtet wird?

Danke!

Gruß,
Thomas

markusj
18.09.2010, 14:26
Weil er an dieser Stelle keinen Sinn macht ...
volatile sagt dem Compiler, dass er jeden Zugriff auf diese Variable (lesen/schreiben) ausführen MUSS - Was im EEPROM-Kontext keinen Sinn ergibt. GCC liest den EEPROM nicht implizit ein, daher sind alle zusätzlichen Qualifier wie "const" und "volatile" hinfällig weil wirkungslos, da sie in deinen Zuständigkeitsbereich fallen.
Aus diesem Grund erwarten die EEPROM-Funktionen eben keinen volatile-Pointer sondern einen "ganz normalen".

mfG
Markus

Edit: Crossposting bei µC.net (http://www.mikrocontroller.net/topic/190842) ...

tommy1977
20.09.2010, 21:43
Alles klar. Vielen Dank!