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 ?
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.
Hab mich soeben entschieden. Mit Erfolg ! @ prx : Danke für Deine schnelle Hilfe! p.s. Was ist K&R-Stil ?
Giuseppe B. schrieb: > p.s. Was ist K&R-Stil ? Die C Sprache vor ANSI-C aka C89. Sah noch etwas anders aus.
ok. vergiss das mit K&R... hab bei wiki geschaut... :)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.