У меня странное поведение. Я использую 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 \ г», а затем запустить 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;
}
}
}
После добавления дополнительного другое положения, посылая «XXX \ г» к УАППАМ и вызывая 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