0

奇妙な動作に遭遇しています。ESP8266 arduino SPIFFS を使用して構成設定を保存しています。これが mycode の関連部分です。

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
4

1 に答える 1