Ich schreibe einen arduino seriellen Kommunikationscode, wo ich Satz durch serielle Kommunikation wie "azyb" + Satz + "byza" senden werde, wo erster und zweiter Teil ist, um meinen Satz zu identifizieren, wird beginnen und enden. Mein Code ist hier (nur gibt die Loop-Funktion als andere funktionieren gut):Warum diese seltsame Endlosschleife auftritt?
void loop()
{
if (Serial.available() > 0)
{
int i=0, j=0, len=0;
char *sentance;
String line = Serial.readString();
len = line.length();
Serial.println(len);
Serial.println(line);
for (; i < len; i++)
if (line[i] == 'a' && line[i+1] == 'z' && line[i+2] == 'y' && line[i+3] == 'b'){
//first if
Serial.println("First");
i += 4;
while (i < len){
sentance[j] = line[i];
i++; j++;
if (line[i+1] == 'b' && line[i+2] == 'y' && line[i+3] == 'z' && line[i+4] == 'a'){
// second IF
Serial.println("Second");
sentance[j] = 'NULL';
encry_flag = true;
i = i + 4;
line = "";
break;
}
}
}
if (!encry_flag){
Serial.println("No code is send");
Write_text("damn "); // to write text in OLED display
}
else{
Serial.println(sentance);
Write_text(sentance); // to disply sentence in OLED display
encry_flag = false;
}
// clear the buffer
while (Serial.available() > 0)
char c= Serial.read();
}
}
Aber wenn ich einen gültigen Satz wie „azybanklonbyza“ senden, die in eine gefangen in OLED-Display, der Code „anklon“ angezeigt Endlosschleife, die zuerst geht, wenn die Bedingung erfüllt ist, aber nie bis zur zweiten läuft, wenn die Bedingung erfüllt ist, und dann zurückkreist, was nicht so sein sollte.
Diese Endlosschleife prüft die Bedingung entweder nicht, ob "encr_flag" wahr oder falsch ist, und geht nie zu der Anweisung, bei der der Puffer gelöscht wird. Aus dem Screenshot können Sie verstehen, dass die for-Schleife und die while-Schleife innerhalb der for-Schleife bricht als insgesamt Strings immer wieder gedruckt wird, die nur einmal für for-Schleife erfolgt.
Woher wird diese Endlosschleife erstellt? Ich bin total verloren.
FYI: wenn "azyb" und "byza" nicht am Anfang und am Ende hinzugefügt wird, lief der Code gut, da er nie eine if-Bedingung erfüllt. Ich habe versucht, mit einem Zeichen auch ("azybhbyza", um "h" zu drucken), aber das Ergebnis ist das gleiche.
Meine Variable i wird initialisiert, bevor der Satzzeiger deklariert wird, so dass Satzspeicher den Wert von i nicht korrumpieren kann, soweit ich weiß. – Anklon
gut, ich weiß nicht Kumpel – Soulslayer