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

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