casten mit volatile, GCC 3.3.1, ATmega64

Gast #76927
Lesenswert?

Hallo!

wenn ich das mit dem Volatile richtig verstanden habe,

dann sollte folgendes Beispiel nicht funktionieren:
(testvar wird in einem interrupt inkrementiert)

 char testvar;
   while( testvar < 6)
   {
      WDG(); // Watchdog
   };

so ist es auch, der prozessor läuft sich fest. so weit so gut.


deshalb habe ich mal versucht testvar umzucasten:

   while( ((volatile char)testvar) < 6)
   {
      WDG(); // Watchdog
   };


jetzt sollte man aus der Schleife rauskommne, sobald testvar
hochgezählt ist. passiert aber nicht, der code ict der gleiche wie im
Beispiel ohne cast

warum??

so wirds compilert:
   while( testvar < 6)
    2bda:  80 91 1a 02   lds  r24, 0x021A
    2bde:  86 30         cpi  r24, 0x06  ; 6
    2be0:  18 f4         brcc  .+6        ; 0x2be8
    {
       WDG();
    2be2:  a8 95         wdr
    2be4:  86 30         cpi  r24, 0x06  ; 6
    2be6:  e8 f3         brcs  .-6        ; 0x2be2
    }
Gast #76928
Lesenswert?

Klar, Du kannst einen type qualifier nicht so einfach casten.  Du mußt
die Variable schon passend mit dem qualifier deklarieren.

(Der cast funktioniert m. E. für einen qualified pointer type.  So
sind beispielsweise die IO-Register deklariert.)

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