Volatile struktur an Funktion übergeben

Gast #6498844
Lesenswert?

Hallo,
ich habe ein eine structur, welche volatile parameter beinhaltet
1
typedef struct
2
{
3
  volatile uint16_t seconds;
4
  volatile uint8_t minutes;
5
  volatile uint8_t hours;
6
  volatile uint8_t day;
7
  volatile uint8_t month;
8
  volatile uint8_t year;
9
  volatile uint8_t valid    :1;
10
  volatile uint8_t leapYear :1;
11
}time_ts
1
volatile time_ts time_s;

dieser wird in in der ISR verändert.
Jetzt möchte ich diese Struktur aber auch einer Funktion übergeben und 
auch dort bearbeiten
1
void checkTime(&time_s)

Hier bekomme ich die Warnung:
passing argument 1 of checkTime discards volatile qualifier from pointer 
target type

Da habe ich zwei Fragen zu.
1) Müssen die einzelnen Elemente im Struct überhaupt volatile sein? Oder 
reicht es, wenn der struct an für sich volatile ist?

2) Wie kann ich die struktur einer Funktion übergeben?
Gast #6498861
Lesenswert?

dummschwaetzer schrieb:
>>void checkTime(&time_s)
> ???
> da sollte der compiler abre anderefehlermeldungen werfen
>>void checkTime(time_ts *time_s) könnte klappen

Ja, du hast recht. Das void war verkehrt.
habe es abgetippt und ich weiß nicht.
Die Deklaration ist
1
 void checkTime(time_ts* time_s);
ich rufe die Funktion aber mit
1
checkTime(&time_s)
auf
#6498907
Lesenswert?

Dort wo der Zugriff auf den Speicher erfolgt, muss der Compiler wissen, 
dass der Speicherinhalt "volatile" ist.

Der Prototyp von checkTime() müsste also so aussehen:
1
checkTime(volatile time_ts * foo);

Aber muss die Struktur überhaupt per Pointer an die Funktion übergeben 
werden? Wenn die Struktur in einer ISR geändert wird, hat sie doch 
vermutlich sowieso "global scope".

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