Всем добрый день, в ардуинке не силен, разбираюсь, но не могу найти подводного камня. Смысл - прочитать "настройки" из файла. Настройки считываются, в консоль все переменные выдаются верно, но если убрать комментарий с String Mport_ = obj["port"]; полую вот такой стек и перезагрузку железяки. Думал не хватает памяти, комментировал другую переменную, все работает. Как только снимаю комментарий с "port" снова ошибка. И да, в loop вызов делается один раз. Подскажите куда смотреть и как отдебажить? Спасибо. Код (Text): Exception (3): epc1=0x4010010e epc2=0x00000000 epc3=0x00000000 excvaddr=0x40000001 depc=0x00000000 ctx: cont sp: 3ffffca0 end: 3fffffd0 offset: 01a0 >>>stack>>> 3ffffe40: 3fff33dc 3fff33cc 3fff338c 40100689 3ffffe50: 402119e8 00000000 000003e8 0000507f 3ffffe60: 00000000 00000000 00000000 00000000 3ffffe70: 00000000 00000000 00000000 00000000 3ffffe80: 00000000 00000000 00000000 00000000 3ffffe90: 00000000 00000000 00000000 00000000 3ffffea0: 3ffefd34 00001f95 00001f95 4010020c 3ffffeb0: 3fffdad0 00000000 3ffffef8 401006dc 3ffffec0: 402116f8 00000000 3ffefd84 402103ec 3ffffed0: 3fffdad0 00000000 3ffefa1c 40210408 3ffffee0: 3fffdad0 00000000 3ffefa1c 4020973d 3ffffef0: ffffffff 3fffc6fc 00000001 3ffefd38 3fffff00: 00000000 3fffdad0 3ffefd40 00000030 3fffff10: 00000000 3fffdad0 3ffefd40 00000030 3fffff20: 00000000 00000000 00000000 00000000 3fffff30: 00000000 00000000 00000000 00000000 3fffff40: 00000000 00000000 3ffefd84 4020f33c 3fffff50: 40208f30 00ffffff 3ffefd84 40210dac 3fffff60: 40210dc0 3ffefa94 3ffefd84 402095c2 3fffff70: 40208f30 0104a8c0 40210dc0 40210dac 3fffff80: 00000000 00000000 00000000 4020f080 3fffff90: 00002580 0000001c 3ffefd84 3ffefd40 3fffffa0: 00000000 00000000 00000001 3ffefd40 3fffffb0: 3fffdad0 00000000 3ffefd38 4020ec3c 3fffffc0: feefeffe feefeffe 3ffe862c 40100739 <<<stack<<< Код (C++): String mqtt_server = "NoServerMQTT"; // Имя сервера MQTT String mqtt_port = "9999"; // Порт для подключения к серверу MQTT String mqtt_user = "NoUserMQTT"; // Логин от сервер String mqtt_pass = "NoPassMQTT"; // Пароль от сервера String mqtt_topic = "NoTopicMQTT"; //Топик для устройства ................................ void readFileMqtt() { //читаем mqtt настройки из файла bool mqttresult = SPIFFS.begin(); Serial.println(" Read Mqtt Settings: " + mqttresult); File mqttff = SPIFFS.open("/mqtt.txt", "r"); //открываем и читаем настройки String mqttinput = ""; while(mqttff.available()) { mqttinput = mqttff.readStringUntil('\n'); } DynamicJsonDocument mqttdoc; deserializeJson(mqttdoc, mqttinput); JsonObject obj = mqttdoc.as<JsonObject>(); //Забираем String Mserver_ = obj["server"]; //String Mport_ = obj["port"]; String Muser_ = obj["user"]; String Mpass_ = obj["pass"]; String Mtopic_ = obj["topic"]; //Тут такая фиговая магия с преобразованием mqtt_server = Mserver_; //mqtt_port = Mport_; mqtt_user = Muser_; mqtt_pass = Mpass_; mqtt_topic = Mtopic_; //Serial.println("mqtt_server: " + mqtt_server); //Serial.println("mqtt_port: " + mqtt_port); Serial.println("mqtt_user: " + mqtt_user); //Serial.println("mqtt_pass: " + mqtt_pass); Serial.println("mqtt_topic: " + mqtt_topic); mqttff.close(); SPIFFS.end(); } ........................ void loop(){ ...................... readFileMqtt(); ...................... }
Тогда видимо Вы имели ввиду то, что я написал в вопросе "Настройки считываются, в консоль все переменные выдаются верно". Этим я хотел сообщить, что чтение из файла происходит и все данные в файле записываются в переменные, все переменные соответствуют всем записанным данным в файле. Т.е. да, в файле оно есть.
Вот так выглядит консолька, если бы я знал как вот так, я бы не задал вопроса, по этому прошу помощи. Код (C++): 10:20:59.772 -> Read Mqtt Settings: 10:20:59.806 -> mqtt_port: 9124
Да, подвела не внимательность, проблемы как таковой и нет, опечатка в функции которая шла после вызова чтения файлов. Вопрос закрыт.
При обращении к элементам вы не проверяете на наличие ключа, не вызываете bool JsonObject::containsKey(const char* key) const; если ключа нет, получите NULL и код будет крашится.