Forum: Mikrocontroller und Digitale Elektronik volatile pointer


von Unwissender69 (Gast)


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?

von Frank M. (ukw) (Moderator) Benutzerseite


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

von Unwissender69 (Gast)


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!

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Unwissender69 schrieb:

> 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.

Dann braucht sie auch nicht volatile zu sein.

Gruß,

Frank

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.