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

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.