我正在写一个arduino串行通信代码,我将通过串行通信发送句子,如“azyb”+句子+“byza”,其中第一部分和第二部分用于识别我的句子将要开始和结束。我的代码是在这里(只是给循环功能等的正常工作):为什么这个奇怪的无限循环发生?
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();
}
}
但是,当我发送一个有效的句子,如“azybanklonbyza”将在OLED显示屏显示“anklon”,代码被困成无限循环,如果条件成立,它会先到达第一个条件,但如果条件成立,则永远不会运行到第二个条件,然后向后循环,这不应该像这样起作用。
这个无限循环不检查条件要么encry_flag是真或假,并且永远不会去到缓冲区被清除的语句。 从截图中,您可以理解for循环中的for循环和while循环会因为总的字符串被一次又一次地打印而在循环之前仅执行一次。
从哪里创建这个无限循环?我完全迷失了。如果在开始和结束时没有添加“azyb”和“byza”,代码运行得很好,因为它从来没有满足任何条件。我也尝试使用一个字符(“azybhbyza”打印“h”),但结果是一样的。
我的变量i在声明句子指针之前被初始化,所以句子的存储器不能破坏我的值,据我所知。 – Anklon
好吧,我不知道哥们 – Soulslayer