Volatile Struct, Member nicht volatile

OP #1353791
Hallo,

ich habe folgende Deklaration eines Structs:
1
struct RxPd_typ {
2

3
    /* -1: not fragmented; >=0: fragment offset */
4
    short fragment_offset;
5

6
    /* 0: not processed; 1 = processed */
7
    short processed;
8

9
    short ip_checksum;
10
    short udp_checksum;
11
    unsigned char * dataptr;
12
    short header_length;
13
    short udp_length;
14
    short ip_length;
15
    unsigned char command;
16
};
und zusätzlich:
1
extern volatile struct RxPd_typ RxPd[1024];

Definition ist in einer .c Datei:
1
volatile struct RxPd_typ RxPd[1024];

Schreibe ich nun folgende Variable:
1
volatile unsigned char *ptr;

auf
1
RxPd[x].dataptr = ptr;

Meckert der Compiler, dass das volatile verworfen wird. Wenn ich dataptr 
im struct nochmal extra mit volatile kennzeichne, gehts. Wieso wird 
volatile nicht auf alle members angewandt? Wenn ich mich nicht völlig 
blind war, hab ich es genauso gemacht, wie es u.a. hier in einem anderen 
forenbeitrag beschrieben wurde.

grüße
daniel
OP #1353822
A. K. schrieb:
> Ein pointer to volatile (volatile int *p) ist nicht das gleiche wie ein
> volatile pointer (int *volatile p).

das weiß ich, aber ich habe nirgends einen volatile pointer. mit "Wenn 
ich dataptr im struct nochmal extra mit volatile kennzeichne" meine ich 
folgendes:
1
struct RxPd_typ {
2

3
    /* -1: not fragmented; >=0: fragment offset */
4
    short fragment_offset;
5

6
    /* 0: not processed; 1 = processed */
7
    short processed;
8

9
    short ip_checksum;
10
    short udp_checksum;
11
    volatile unsigned char * dataptr;
12
    short header_length;
13
    short udp_length;
14
    short ip_length;
15
    unsigned char command;
16
};

in diesem Fall meckert der compiler nicht.
Persönliche Seite #1353835
Daniel G. schrieb:
> A. K. schrieb:
>> Ein pointer to volatile (volatile int *p) ist nicht das gleiche wie ein
>> volatile pointer (int *volatile p).
>
> das weiß ich, aber ich habe nirgends einen volatile pointer.

DOCH! Und zwar genau dann, wenn du das Struct volatile machst ist auch 
der Pointer volatile. Aber nicht das, worauf er zeigt.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 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.