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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.