casten mit volatile, GCC 3.3.1, ATmega64

Gast #76927
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
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

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.