mikrocontroller.net

Forum: Compiler & IDEs warning: comparison between pointer and integer


Autor: Christoph E. (ello)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Durch den Code unten soll eine Tasten-Entprellung stattfinden.
Es soll eine positive Flanke abgefragt werden und dann eine Aktion 
auslösen.
Den restlichen Teil des Programmes hab ich mal weggelassen.
Bei dieser Abfrage:
if (taster1 == 1) { 
Kommt als Compilerwarnung: main.c:85: warning: comparison between 
pointer and integer.
Es funktioniert auch nicht auf dem µC.
Habt ihr eine Idee?
Hier ist mal der betroffene Programmcode:
#define TASTERPORT PIND   
#define TASTER1    PIND2   
#define TASTER2    PIND3  


//############################################################################

void init(void)

{

  TCCR1B |= (1 << CS12) ; TIMSK |= (1 << OCIE1A);
  TCCR0 |= (1 << CS00) | (1 << CS02) ; TIMSK |= (1 << TOIE0);
  
// PORTD = 0b00000000; // Bei Ausgängen: Ausgangsbyte fest setzen. Bei Eingängen: Pullups aktivieren
  DDRD = 0b01100000; // Datenrichtungsregister: Eingang = 0, Ausgang =1 (Bit 0-4 und 7 = Eingang, Bit 5 und 6 = Ausgang) Led hängt an PD5 und PD6 gegen GND
  Handy_Init();
  
}

//Hauptprogramm
int main (void)
{
Handy_Init();
init();



//############################################################################
while (1)
{

char taster1(void)
{
  static char PinState;
  char NewState = TASTERPORT & ( 1 << TASTER1 );

  if( NewState == PinState )
    return 0;

  NewState = PinState;
  return NewState != 0;
}

char taster2(void)
{
  static char PinState;
   char NewState = TASTERPORT & ( 1 << TASTER2 );

  if( NewState == PinState )
    return 0;

  NewState = PinState;
  return NewState != 0;
}


if (taster1 == 1) {      // Pin 2 (Taster1) auf 1 abfragen
          PORTD |= (1 << PIN5);   // gelbe LED ein für SMS-Versand eingeleidet  
      GSM_Init();
            }    
      else {  
        PORTD &= ~(1 << PIN5);     // gelbe LED aus für SMS-Versand eingeleidet
      }
if (taster2 == 1) {      // Pin 3 (Taster2) auf 1 abfragen
      PORTD |= (1 << PIN6);     // gelbe LED ein für SMS-Versand eingeleidet
      Send_SMS(); 
      }
      else {
        PORTD &= ~(1 << PIN6);     // gelbe LED aus für SMS-Versand eingeleidet
      }      
}
return (1);
}

Schöne Grüße und Frohe Weihnachten

Ello

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ändere

if (taster1 == 1) {      // Pin 2 (Taster1) auf 1 abfragen

in

if (taster1() == 1) {      // Pin 2 (Taster1) auf 1 abfragen

Dein taster1 (und taster2) ist eine Funktion ;-)

Autor: Lötlackl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

wenn taster1 & taster2 Funktionen sind, die Klammern dahinter nicht 
vergessen.
if (taster1() == 1)

mfg Lötlackl

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
BTW:
"Eingebettete" Funktionsdefinitionen sind zwar afaik zumindest unter C99 
möglich, ist aber grottenschlechter Programmierstil... Und dazu noch in 
einer while-Schleife.

Tu Dir selbst den Gefallen und mach das vernünftig und definiere die 
Funktionen außerhalb von main().

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> "Eingebettete" Funktionsdefinitionen sind zwar afaik zumindest unter
> C99 möglich,

Nein. Sie sind eine compilerspezifische Erweiterung.

Autor: Christoph E. (ello)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank! Hat sofort geklappt!

MfG Ello

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rolf Magnus wrote:
>> "Eingebettete" Funktionsdefinitionen sind zwar afaik zumindest unter
>> C99 möglich,
>
> Nein. Sie sind eine compilerspezifische Erweiterung.
Aha. Danke, wieder was gelernt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.