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?
Wohin im Speicher zeigt dein Zeiger denn, also wohin im Speicher soll der Wert hingeschrieben werden?
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.
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?
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?
@ 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.