Hi Forum, ich bekomme beim unten gezeigten Code beim Ausführen folgende Alarmmeldung: ../programm.c:316: warning: passing argument 1 of 'button' from incompatible pointer type unsigned int button( volatile unsigned int *port, unsigned int pin ) { if ( !( *port & ( 1 << pin ) ) ) { _delay_ms( 100 ); if ( *port & ( 1 << pin ) ) { _delay_ms( 100 ); return 1; } } return 0; } button1 = button( &PINF, PF1 ); Weshalb muss ich hier eigentlich einen Pointer verwenden? Gruß
vielleicht uint8_t* statt unsigned int* nehmen? Je nachdem, als was PINF vereinbart ist.
Hallo Klaus,
vielen Dank für die Antwort.
> Je nachdem, als was PINF vereinbart ist.
Wie meinst du das?
Warum wird da eine Warnmeldung angezeigt, wenn ich unsigned int nehme?
Ich kapiere es nicht ganz.Gruß
> > Je nachdem, als was PINF vereinbart ist. > Wie meinst du das? Er meint, dass du die Zeile mit der Deklaration von PINF bitte auch nochmal posten sollst.
Oh je, jetzt steh ich voll auf der Leitung. PINF ist ja im Grunde keine Variable. DDRF = 0x00; PORTF = 0xFF; Wie muss ich den PIN deklarieren???
Lars schrieb: > Wie meinst du das? PINF wird ja irgendwo in einer Headerdatei definiert sein. Wenn da z.B. steht:
1 | #define _MMIO_BYTE(mem_addr) (*(volatile uint8_t *)(mem_addr))
|
2 | ...
|
3 | # define __SFR_OFFSET 0x20
|
4 | ...
|
5 | #define _SFR_IO8(io_addr) _MMIO_BYTE((io_addr) + __SFR_OFFSET)
|
6 | ...
|
7 | #define PINF _SFR_IO8(0x00)
|
dann steht ... PINF ... letztlich für:
1 | ... (*(volatile uint8_t *)((((0x00))+0x20))) ... |
, also irgendeine Zahl, behandelt als vol.-Zeiger auf uint8_t, dann das genommen, worauf dieser Zeiger 0 zeigt. Wenn du dann &PINF schreibst, ist dieser Ausdruck ein volatile uint8_t* und damit nicht kompatibel mit einem volatile unsigned int *. Schließlich erwartet deine Funktion ja einen Zeiger auf unsigned int. (Nachdem du nicht verrätst, welchen Rechner du hast, musst du selber durch die Headerdateien laufen und suchen. Mein Beispiel ist aus der Headerdatei für den atmega128. Es wird wohl ein AVR sein, und abgesehen von den konkreten Werten geht das ja alles nach diesem Schema.)
PS: meine Quelltextfragmente sind aus sfr_defs.h und iom128.h, (nicht, daß ich hier noch den Titel Lügenbaron bekomme für heimliches Abschreiben)
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.