奇妙な動作が発生しました。 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のを(実行)SPIFSSに設定パラメータSSIDやパラメータが保存されているであろう。このコードは、まったく関係のないコードを追加するまでは問題なく動作します。
これは新しいコードの外観です。 、追加のelse節を追加するUARTに "XXXの\ rを" 送信してsaveconfigのを引き起こした後
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;
}
}
}
は()例外エラーが発生します。新しいコードが実行されていないので、これは困惑しています。
例外エラーは次のとおりです。
Exception (3):
epc1=0x401002f0 epc2=0x00000000 epc3=0x00000000 excvaddr=0x400072f6 depc=0x00000
000
ctx: sys
sp: 3fff06b0 end: 3fffffb0 offset: 01a0
ここでwhoはbuffer_indexをインクリメントしますか? – cagdas
問題のコードには示されていません。他の場所で実装されています。 – user781486
arduino文字列としてcharBuffを定義し、cat:charBuff + = cmdに演算子オーバーロードを使用します。コードにはいくつかの安全でない部分がありますので、上位レベルのAPIを使用してください。 – cagdas