Forum: Compiler & IDEs casten mit volatile, GCC 3.3.1, ATmega64


von Martin Raffelsieper (Gast)


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
    }

von Jörg Wunsch (Gast)


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

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.