Hallo,
Was bei Dir funktioniert, ist eine Präprozessor-Anweisung, keine Variablen-Deklaration oder -Definition! Bitte ein (möglichst kurzes, aber kompilierbares!) Beispiel für das, was nicht funktioniert. Vermutlich zeigt Dir mein nächster Absatz aber schon das Problem:... Wenn ich die Variablen mit <pre>#define</pre> Deklariere, funktioniert alles wunderbar. Wenn ich es hingegegen mit <pre>uint8_t</pre> mache Funktioniert es nicht.
Schreibe ich statt <pre> if((run_rwd)&&(auswahl=='f')) auswahl='r';</pre> dieses <pre> if((run_rwd==1)&&(auswahl=='f')) auswahl='r';</pre> Funktioniert das Rückwärts Shiften auch nicht.
- 1. Soweit ich mich erinnere, ist in (Standard-)C "unwahr" als "0" definiert; jeder andere Wert ist "wahr"; allerdings ist der Compiler angehalten, für "wahr" eine "1" zu setzen, wenn er selbst einen Vergleich durchführt.
2. Welches Bit ist denn in run_rwd möglicherweise gesetzt? Antwort: Bit1 (nämlich 1<<PA1) --- nicht Bit0! Also darfst Du nicht mit "1", sondern musst mit "2" vergleichen:Das hatte ich in einem früheren Posting gemeint, als ich schrieb, Du hättest ja ursprünglich mit Bit1 verglichen.Code:if((run_rwd==2)&&(auswahl=='f')) auswahl='r';
Das ist die Problematik, wenn man Werte anstelle von logischen Typen benutzt.
if((run_rwd)&&(auswahl=='f')) ist aber völlig in Ordnung!
Setze Dich doch auch einmal mit dem Datentyp "bool" auseinander. Wenn Du "bool" verwendest, muss <pre>#include <stdbool.h></pre> eingebunden werden.
Viele Grüße
Fred
Lesezeichen