Ich habe jetzt seit Tagen das Problem gesucht und soweit eingekreist,
dass ich nicht das ganze progamm posten muss, sondern nur die Teile die
sich nicht nachvollziehbar verhalten.
in einer kleinen Routine mache ich folgende Zuweisung:
if(Key != 0)
{
setbit(PORTC,PC4);
ir_string("abcdefGhijklmnopqrstuvwxyz");
Key = 0;
clearbit(PORTC,PC4);
}
Weil "G" ein Großbuchstabe ist mus vor dem G ein Shift-Zeichen
geschickt werden, anschließend wird ein kleines "g" gesendet.
Das geschieht hier
if(data[i1] >=0x41 && data[i1] <=0x5a)
{
data[i1] = data[i1] + 32;
if(!checkbit(status,4))
{
shift();
}
}
Status 4 merkt sich nur ob die Shift-Taste gedrückt ist, falls das
nächste Zeichen auch gross geschrieben werden muss.
Anschließend wird das Zeichen gesendet und alles klappt, wie es soll.
Beim nächsten Senden ist das "G" aber klein, obwohl die Zeichenkette
neu zeugewiesen wird, d.h. bei
ir_string("abcdefGhijklmnopqrstuvwxyz");
wird entweder ein kleines "g" an übergeben, oder die Zeile wird nicht
ausgeführt, die davor und danach aber schon.
Keine dieser Zeilen läuft in einer ISR oder wird von einer aufgerufen.
Es ist sicher das die if-Anweisung
if(data[i1] >=0x41 && data[i1] <=0x5a)
beim zweiten Durchlauf nicht mehr ausgeführt wird.
Woran liegt das und wie schalte ich das aus?
> Beim nächsten Senden ist das "G" aber klein, obwohl die
Zeichenkette
neu zeugewiesen wird, d.h. bei
Probiere mal herauszufinden, was das Schlüsselwort const bei C
bedeutet.
Dann schreibe ir_string() so um, dass die Funktion zu diesem Prototyp
passt:
void ir_string(const char * string)
Außerdem teste bitte nicht auf absolute Zahlen sondern if (... >= 'A' && ... <= 'Z') oder besser gleich #include <ctypes.h> und isupper(), danach dann tolower() benutzen, um einen Kleinbuchstaben draus zu machen.
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.