Forum: Mikrocontroller und Digitale Elektronik Zeiger fehler: unable to resolve identifier


von Sascha (Gast)


Lesenswert?

Hi
ich habe eine Funktion, in der ich einen Zeiger deklarierer
unsigned int *Zeiger;

in einer anderen Funktion möchte ich einen Wert dahinschreiben

*Zeiger = 123;

jedoch bekomme ich als Fehlermeldung
unable to resolve identifier Zeiger

das ganze programmiere ich in MPLAB X
jetzt ist die zweite Funktion eine Interrupt funktion. kann es sein, 
dass es deswegen nicht funktioniert?

von Sebastian W. (wangnick)


Lesenswert?

Wohin im Speicher zeigt dein Zeiger denn, also wohin im Speicher soll 
der Wert hingeschrieben werden?

von Sascha (Gast)


Lesenswert?

int *zeiger = 0

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Sascha schrieb:
> ich habe eine Funktion, in der ich einen Zeiger deklarierer
> unsigned int *Zeiger;
>
> in einer anderen Funktion möchte ich einen Wert dahinschreiben
>
> *Zeiger = 123;

 Zeiger global deklarieren.

von Sascha (Gast)


Lesenswert?

Ich habe noch einmal eine nachfrage.
momentan sieht es wie folgt aus
1
...
2
unsigned int *Zeiger = 0x0000;
3
...
4
5
int display(void){
6
  ...
7
  ...
8
  while(1){
9
    DisplayData(Zeiger);
10
    WriteData();
11
  }
12
}
13
14
void __attribute__((interrupt, no_auto_psv)) _C1Interrupt(void) {
15
  LATBbits.LATB0 = !LATBbits.LATB0;
16
  *Zeiger = 0x1234;
17
}

Die funktion DisplayData(var) gibt mir die eingabe als binärwert zurück.
Die Funktion WriteData() schreibt die Daten auf das Display.
Diese beiden Funktionen funktioneieren auch.

Zunächst soll also nur nullen angezeigt werden. Bei einem Interrupt soll 
mir der wert 0x1234; als binär angezeigt werden. Der Interrupt wird auch 
ausgelöst (erkenne ihc an der LED, die an und aus geht)
jedoch ändert sich das Display nicht. dort bleibt weiterhin nur nullen 
stehen.

Aber ich überschreibe doch den Wert oder nicht?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

In Deiner Interruptfunktion dereferenzierst Du einen Pointer, der auf 0 
zeigt, d.h. Du schreibst an die Speicheradresse 0.

Das nennt man Nullpointerzugriff und das ist ein Fehler.

Warum und wozu überhaupt verwendest Du hier einen Pointer?

von Falk B. (falk)


Lesenswert?

@ Sascha (Gast)

>Ich habe noch einmal eine nachfrage.
>momentan sieht es wie folgt aus

WIRKLICH? Poste deinen ORIGINALCODE und NICHT eine abgeschriebene 
Version!
Siehe Netiquette!

>...
>unsigned int *Zeiger = 0x0000;
>...

Ein Zeiger wird in den seltesten Fällen mit einer Konstante 
initialisiert und nahezu nie mit 0x0000, was auch als NULL bekannt ist.
Eher so.

1
unsigned int bla;
2
unsigned int *Zeiger = &bla;

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.