Forum: Compiler & IDEs Initialisierung des Inhaltes von int-variable


von Giuseppe B. (brungi)


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 ?

von (prx) A. K. (prx)


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.

von Giuseppe B. (brungi)


Lesenswert?

Hab mich soeben entschieden. Mit Erfolg !

@ prx : Danke für Deine schnelle Hilfe!

p.s. Was ist K&R-Stil ?

von (prx) A. K. (prx)


Lesenswert?

Giuseppe B. schrieb:
> p.s. Was ist K&R-Stil ?

Die C Sprache vor ANSI-C aka C89. Sah noch etwas anders aus.

von Giuseppe B. (brungi)


Lesenswert?

ok. vergiss das mit K&R...
hab bei wiki geschaut... :)

von Guest (Gast)


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
}

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
Noch kein Account? Hier anmelden.