我遇到了一個奇怪的行爲。我正在使用ESP8266 arduino SPIFFS來存儲配置設置。這是mycode的相關部分;添加無關代碼後,SPIFSS代碼崩潰
void loop()
{
handleUartRxOk();
}
void handleUartRxOk() {
String cmd;
char charBuff[3200];
char char_print[50];
static bool terminatorReceived = false;
char incomingChar = 0; // for incoming serial data
if (Serial.available()) {
incomingChar = Serial.read();
saveChar(incomingChar);
if (incomingChar == '\r') {
terminatorReceived = true;
}
if (terminatorReceived) {
buffer[buffer_index - 1] = '\0';
cmd = String(buffer);
if (cmd == "XXX") {
ConfigSettings.ssid = "SSID_XX";
ConfigSettings.password = "PASSWORD_XX";
saveConfig();
}
buffer_index = 0;
terminatorReceived = false;
}
}
}
在上面的代碼中,UART將接收命令「XXX \ r」,然後運行saveconfig的(),其將保存的配置參數的SSID和參數到SPIFSS。這段代碼工作得很好,直到我添加更多完全不相關的代碼。
這就是新代碼的外觀。
void handleUartRxOk() {
String cmd;
char charBuff[3200];
char char_print[50];
static bool terminatorReceived = false;
char incomingChar = 0; // for incoming serial data
if (Serial.available()) {
incomingChar = Serial.read();
saveChar(incomingChar);
if (incomingChar == '\r') {
terminatorReceived = true;
}
if (terminatorReceived) {
buffer[buffer_index - 1] = '\0';
cmd = String(buffer);
if (cmd == "XXX") {
ConfigSettings.ssid = "SSID_XX";
ConfigSettings.password = "PASSWORD_XX";
saveConfig();
}
//Why does adding this else statement cause saveConfig() to crash when run?
else {
strcat(charBuff, cmd.c_str());
}
buffer_index = 0;
terminatorReceived = false;
}
}
}
添加額外else子句,發送 「XXX \ r」 把UART和造成saveconfig的()後,會引起異常錯誤。這是令人費解的,因爲新代碼甚至無法運行。
異常錯誤如下;
Exception (3):
epc1=0x401002f0 epc2=0x00000000 epc3=0x00000000 excvaddr=0x400072f6 depc=0x00000
000
ctx: sys
sp: 3fff06b0 end: 3fffffb0 offset: 01a0
誰在這裏增加buffer_index? – cagdas
未在相關代碼中顯示。在其他地方實施。 – user781486
將charBuff定義爲arduino字符串並使用運算符重載到cat:charBuff + = cmd。你的代碼有幾個不安全的部分,所以使用高級別的API。 – cagdas