Loops 为什么会出现这种奇怪的无限循环?
我正在写一个arduino串行通信代码,我将通过串行通信发送句子,比如“azyb”+句子+“byza”,其中第一部分和第二部分是识别我的句子的开始和结束。我的代码在这里(只给出循环函数,而其他函数工作正常):Loops 为什么会出现这种奇怪的无限循环?,loops,arduino,serial-port,infinite-loop,Loops,Arduino,Serial Port,Infinite Loop,我正在写一个arduino串行通信代码,我将通过串行通信发送句子,比如“azyb”+句子+“byza”,其中第一部分和第二部分是识别我的句子的开始和结束。我的代码在这里(只给出循环函数,而其他函数工作正常): void循环() { 如果(Serial.available()>0) { int i=0,j=0,len=0; 字句; String line=Serial.readString(); len=line.length(); 序列号println(len); 串行打印LN(行); 对于(;
void循环()
{
如果(Serial.available()>0)
{
int i=0,j=0,len=0;
字句;
String line=Serial.readString();
len=line.length();
序列号println(len);
串行打印LN(行);
对于(;i0)
char c=Serial.read();
}
}
但当我发送一个像“azybanklonbyza”这样的有效语句,在OLED显示屏上显示“anklon”时,代码被困在一个无限循环中,如果条件为真,它会一直循环到第一个,但如果条件为真,它永远不会运行到第二个,然后循环回来,它不应该这样做
这个无限循环不检查encry_标志为true或false的条件,并且从不转到正在清除缓冲区的语句。
从屏幕截图中,您可以理解for循环中的for循环和while循环会随着总字符串的不断打印而中断,这在for循环之前只执行过一次
这个无限循环是从哪里创建的?我完全迷路了
仅供参考:如果没有在开头和结尾添加“azyb”和“byza”,代码运行得很好,因为它永远不会满足任何if条件。我也试着用一个字符(“azybhbyza”来打印“h”),但结果是一样的 我不熟悉arduino,但是
if (line[i+1] == 'b' && line[i+2] == 'y' && line[i+3] == 'z' && line[i+4] == 'a')
不应该从我开始吗?我看到你用了一个字符指针“sentance”,但据我所知,你没有在任何地方初始化它。根据编译器内存管理的不同,未初始化的指针可能会导致内存损坏。根据硬件内存的不同,我还考虑到它可能会损坏其他一些内存内容。这可以解释变量“i”没有到达终点。尝试用一些空格初始化sentance,如
sentance = new char[25];
这可能有用。而且,如果您在硬件上进行测试,它有时可能会表现得异常。我的变量i在声明语句指针之前已初始化,因此就我所知,语句内存不会损坏i的值。我不知道,巴迪
sentance = new char[25];