Initialisierung des Inhaltes von int-variable

OP #2853501
Lesenswert?

Hallo an alle,

ich versuche gerade eine Schrittmotorsteuerung zu programmieren ( unter 
verwendung von L297 und L298) , leider scheint bei der initialisierung 
der int-variablen für die Drehrichtung irgendwas nicht zu stimmen.

#code
int rot=0;
void dir_to_lcd(rot)
{
        LCDPos(2,14);
        if(rot==0)
        {
                LCDWrite("cw");
        }
        else
        {
                if(rot==1)
                {
                        LCDWrite("ccw");

                }
                else
                {
                        LCDWrite("err");
                }
        }
}
#code ende

auf dem display erscheint immer "err" , obwohl ich `rot` mit `0` 
initialisiert habe.

wenn ich allerdings die Funktion dir_to_lcd mit

           void dir_to_lcd(int rot)
initialisiere, bricht der avr-gcc ab und bringt die Meldung:
"too few arguments in function..."
Also scheint "rot" garnicht zu existieren.

Was mache ich falsch ?
#2853507
Lesenswert?

Die Deklaration
   void dir_to_lcd(rot)
ist K&R-Stil und heute vermutlich in keinem C Buch mehr präsent. Der 
Compiler frisst es aber wohl noch, wenngleich vermutlich nicht 
kommentarlos. Inhaltlich ist das ähnlich wie
   void dir_to_lcd(int rot)
und deklariert einen Parameter "rot", der die globale Variable "rot" 
verdeckt. Weshalb die irrelevant ist.

Du solltest dich entscheiden, ob du mit einer globalen Variablen oder 
mit einem Parameter arbeiten willst. So jedenfalls ist das Unfug.
Gast #2854743
Lesenswert?

Dein Code macht genau das, was du programmiert hast. Gehe ihn einfach 
mal Zeile für Zeile durch, dann wird es klar...

Alternativ mit switch/case:
1
void dir_to_lcd(int rot)
2
{
3
  LCDPos(2,14);
4
  switch (rot) {
5
    case 0: {
6
      LCDWrite("cw");
7
      break; 
8
    }
9
    case 1: {
10
      LCDWrite("ccw");
11
      break;
12
    }
13
    default: {
14
      LCDWrite("err");
15
      break;
16
    }
17
  }
18
}

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