-         
Ergebnis 1 bis 5 von 5

Thema: volatile problem

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    05.11.2007
    Ort
    Berlin
    Beiträge
    610

    volatile problem

    Anzeige

    ich habe eine Merkwürdigkeit mit meinem C-COMPILER von IAR
    Ein void pointer ist meiner Meinung nach zu allen Typen kompatibel.
    deshalb wird der folgende code auch einwandfrei compiliert.

    int x;

    void write(void* address)
    {
    }

    void main(void)
    {
    write(&x);
    }


    wenn ich aber
    int volatile x;
    schreibe, bekomme ich vom Compiler eine Fehlermeldung:
    argument of type "int volatile *" is incompatible with parameter of type "void"

    wie kommt das denn ?, Ich übergebe doch nur die Adresse der Variablen.
    Das "volatile" soll doch nur den Compiler vor Optimierungen zurück halten.

    wenn ich dann eine explizite Typenwandlung vornehme, ist die Welt wieder in Ordnung. Dabei scheint es egal zu sein, wie ich den pointer "caste"
    write((int*) &x);

    ich kann auch
    write((char*) &x);
    schreiben.

    aber wozu brauche ich denn dieses "Casting" überhaupt, wenn eine Variable volatile definiert ist ?

    mfg. Siro

    vielleicht kann mal jemand die paar Zeilen mit einem GNU Compiler testen, ob dort auch eine Fehlermeldung ausgegeben wird. Vielen Dank für Eure Mühe im voraus.

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    ich glaub, es muss heissen
    "volatile int"
    vielleicht hilft das
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    05.11.2007
    Ort
    Berlin
    Beiträge
    610
    Vorab erstmal Danke,
    ich habe eben beide Varianten probiert, scheint dem Compiler egal zu sein ob volatile vor dem int oder nach dem int steht. Er meckert jedesmal.
    Schade....
    Hast aber in sofern recht,
    im C-Buch steht auch, daß "volatile vor dem int stehen soll. Hab grad nachgesehen.

  4. #4
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Es könnte sein, dass der Compiler Pointer auf volatile Variablen anders behandelt, denn das ist durchaus sinnvoll, weil man sonst schwer zu finden Fehler bekommen kann, wenn der Zugriff über den Pointer nicht als Volatile behandelt wird. Allerdings wäre da meiner Meinung nach nur eine Warnung angebracht, denn ausnahmnsweise könnte das ja auch mal oK sein.

    Es gibt auch eine Methode einen Pointer auf ein Volatiles Ojekt zu definieren. Wie genau müßte man mal nachlesen. Da kommt bei der Defintion das Volatile irgendwo mit rein.

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    05.11.2007
    Ort
    Berlin
    Beiträge
    610
    Super, Besserwessi,
    mit dem Hinweis:
    "Pointer auf ein Volatiles Ojekt"
    hab ich mal gegoogelt und auch verschiedenen Dinge gefunden. Als Lösung hat sich nun folgendes ergeben. Ich kann ein "volatile" auch bei dem Parameter in der der Funktion selbst angeben, dann darf ich "normale" sowie "volatile" definierte Variablen übergeben. Damit hat sich mein Problem erledigt. Man lernt doch nie aus....

    vielen Dank

    void write(void volatile* address)
    {
    }

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •