volatile pointer

Gast #2191579
Lesenswert?
• ▲
▼
Guten morgen,
ich habe im Headerfile ein Array als volatile deklariert.
1
extern volatile unsigned short array[2];
2
extern void methode1(void);
3
extern void methode2(unsigned short *arraytemp);

Im Sorcefile verwende ich die variable wie folgt:
1
volatile unsigned short array[2]={0,0};
2

3
void methode1(void)
4
{
5
...
6
array[0]=2;
7
array[1]=1;
8
...
9

10
methode2(array);
11

12
...
13

14
}
15

16
void methode2(unsigned short *arraytemp)
17
{
18
unsigned short tempvar;
19
..
20
tempvar=arraytemp[0];
21
..
22
}

Nun zeigt der Compiler eines Fehlermedung an, dass der Typ "volatile 
unsigned short" mit dem Typ "unsigned short" inkompartibel ist.
Habe ich da einen Denkfehler drin?
Moderator Persönliche Seite #2191608
Lesenswert?
• ▲
▼
Unwissender69 schrieb:
> Nun zeigt der Compiler eines Fehlermedung an, dass der Typ "volatile
> unsigned short" mit dem Typ "unsigned short" inkompartibel ist.

Du hast zwar die Zeile nicht angegeben, die der Compiler anmeckert, aber 
es geht wohl um den Funktionsaufruf von methode2().

> Habe ich da einen Denkfehler drin?

Ja, das volatile-Array wird in der Funktion methode2 als nicht-volatile 
behandelt. Das haut nicht hin. Warum gibst Du überhaupt das array als 
Argument runter? Das ist doch global nutzbar. Schreib doch einfach:
1
void methode2(void)
2
{
3
unsigned short tempvar;
4
..
5
tempvar=array[0];
6
..
7
}

und rufe einfach methode2() ohne Argumente auf.

Wenn Du mir nun sagst, dass Du methode2() auch noch mit anderen 
Argumenten als array aufrufst, dann hättest Du besser den kompletten 
Source hier angegeben. Das kann man in dem knappen Auszug Deines Sources 
nicht riechen ;-)

Gruß,

Frank
Gast #2191671
Lesenswert?
• ▲
▼
Frank M. schrieb:
> Das haut nicht hin. Warum gibst Du überhaupt das array als
> Argument runter? Das ist doch global nutzbar.

Das ist mir auch gerade aufgefallen.
Freitags zu arbeiten sollte wohl verboten werden...


Frank M. schrieb:
> Wenn Du mir nun sagst, dass Du methode2() auch noch mit anderen
> Argumenten als array aufrufst, dann hättest Du besser den kompletten
> Source hier angegeben. Das kann man in dem knappen Auszug Deines Sources
> nicht riechen ;-)

Ja, da sind noch weitere Argumente in der Methode, aber da die Variable 
ja eh global verfügbar ist, ist es wohl egal.

Auch bin ich am zweifeln ob ich überhaupt volatile benötige.
Eigentlich kann die jeweilige variable nur innerhalb der Methoden 
verändert werden und nicht durch Interrups, externen Ereignissen.

Naja, Freitag eben.


Besten Dank!

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.