Volatile Struct, Member nicht volatile

OP #1353791
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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

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