Hallo,

... 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.
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:

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:
    Code:
    if((run_rwd==2)&&(auswahl=='f')) auswahl='r';
    Das hatte ich in einem früheren Posting gemeint, als ich schrieb, Du hättest ja ursprünglich mit Bit1 verglichen.
    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