Forum: Compiler & IDEs seltsames String-Verhalten. Warum?


von flyingwolf (Gast)


Lesenswert?

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?

von Stefan (Gast)


Lesenswert?

> 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)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.