Pointer-Problem

Gast #2155984
Lesenswert?

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ß
Gast #2156026
Lesenswert?

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ß
#2156075
Lesenswert?

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

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