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

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