Arduino ESP8266 - ОШИБКА стека - ESPExceptionDecoder для отладки - нужна помощь, чтобы найти ОШИБКУ

У меня есть один проект, который можно скомпилировать. Функция сломана на оборудовании, и мне нужна помощь, чтобы найти ошибку. Я новичок и прошу помощи. Как уменьшить ошибку?

Скетч:

  • SIGNALESP.ino (https://github.com/HomeAutoUser/ERROR_search/tree/master/SIGNALESP)

Платформа

  • Аппаратное обеспечение: AZDelivery NodeMCU Lua Amica Modul V2 ESP8266 ESP-12E
  • Основная версия: последний git
  • Среда разработки: Arduino IDE
  • Операционная система: Windows

Настройки в IDE

  • Модуль: Nodemcu v1.0
  • Размер флэш-памяти: 4 МБ.
  • Частота вспышки: 40 МГц.
  • Частота процессора: 80 МГц.
  • Скорость загрузки: 115 200

Описание проблемы

15:54:11.662 -> Fatal exception 3(LoadStoreErrorCause):
15:54:11.662 -> epc1=0x4000e041, epc2=0x00000000, epc3=0x00000000, excvaddr=0x4024bcc2, depc=0x00000000
15:54:11.701 -> 
15:54:11.701 -> Exception (3):
15:54:11.701 -> epc1=0x4000e041 epc2=0x00000000 epc3=0x00000000 excvaddr=0x4024bcc2 depc=0x00000000
15:54:11.701 ->
15:54:11.701 -> >>>stack>>>
15:54:11.701 ->
15:54:11.701 -> ctx: cont
15:54:11.701 -> sp: 3ffffce0 end: 3fffffc0 offset: 01a0
15:54:11.701 -> 3ffffe80:  00000000 00000019 4024bcaa 00000000
15:54:11.701 -> 3ffffe90:  00000001 3fff16a4 00000000 000001ff
15:54:11.701 -> 3ffffea0:  00000000 00000019 401003fc 0001687b
15:54:11.701 -> 3ffffeb0:  00000000 00000000 00000001 4024bcaa
15:54:11.701 -> 3ffffec0:  00000000 00000019 3fff1134 4020ef28
15:54:11.701 -> 3ffffed0:  ffffffff 3fffc6fc 00000001 4024bcaa
15:54:11.741 -> 3ffffee0:  00000001 00000000 3fff1134 4020efc2
15:54:11.741 -> 3ffffef0:  00000019 00000000 3fff1134 4020f09d
15:54:11.741 -> 3fffff00:  40214e08 00000000 00001388 00000057
15:54:11.741 -> 3fffff10:  4020f060 3ffef254 4024bcaa 4021104d
15:54:11.741 -> 3fffff20:  3ffef10c 3ffef10c 3ffef254 40211275
15:54:11.741 -> 3fffff30:  007a1200 3ffef10c 3ffeeec0 402019b9
15:54:11.741 -> 3fffff40:  00000000 00000000 00000001 40100304
15:54:11.741 -> 3fffff50:  3ffef10c 00000000 3fff1134 4020f130
15:54:11.741 -> 3fffff60:  3ffef10c 3ffef254 0000000d 3ffef115
15:54:11.781 -> 3fffff70:  3ffef10c 3ffef254 3ffeeec0 402027dd
15:54:11.781 -> 3fffff80:  3fffdad0 00000000 3ffef728 3ffef768
15:54:11.781 -> 3fffff90:  3fffdad0 00000000 3ffef728 40202849
15:54:11.781 -> 3fffffa0:  3fffdad0 00000000 3ffef728 40212b68
15:54:11.781 -> 3fffffb0:  feefeffe feefeffe 3ffe8500 40101059
15:54:11.781 -> <<<stack<<<
15:54:11.781 -> 
15:54:11.781 ->  ets Jan  8 2013,rst cause:2, boot mode:(3,6)
15:54:11.781 -> 
15:54:11.781 -> load 0x4010f000, len 1392, room 16
15:54:11.821 -> tail 0
15:54:11.821 -> chksum 0xd0
15:54:11.821 -> csum 0xd0
15:54:11.821 -> v3d128e5c
15:54:11.821 -> ~ld
15:54:11.861 -> 

Отладка декодера ESPException

Exception 3: LoadStoreError: Processor internal physical address or data error during load or store
PC: 0x4000e041
EXCVADDR: 0x4024bcc2

Decoding stack results
0x401003fc: millis() at D:\Eigene Dateien\ArduinoData\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\core_esp8266_wiring.cpp line 188
0x4020ef28: ClientContext::_write_some() at D:\Eigene Dateien\ArduinoData\packages\esp8266\hardware\esp8266\2.6.3\libraries\ESP8266WiFi\src/include/ClientContext.h line 514
0x4020efc2: ClientContext::_write_from_source(DataSource*) at D:\Eigene Dateien\ArduinoData\packages\esp8266\hardware\esp8266\2.6.3\libraries\ESP8266WiFi\src/include/ClientContext.h line 450
0x4020f09d: WiFiClient::write(unsigned char const*, unsigned int) at D:\Eigene Dateien\ArduinoData\packages\esp8266\hardware\esp8266\2.6.3\libraries\ESP8266WiFi\src/include/ClientContext.h line 364
0x4020f060: WiFiClient::write(unsigned char const*, unsigned int) at D:\Eigene Dateien\ArduinoData\packages\esp8266\hardware\esp8266\2.6.3\libraries\ESP8266WiFi\src\WiFiClient.cpp line 220
0x4021104d: Print::write(char const*) at D:\Eigene Dateien\ArduinoData\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266/Print.h line 60
0x40211275: Print::println(char const*) at D:\Eigene Dateien\ArduinoData\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\Print.cpp line 129
0x402019b9: commands::HandleShortCommand() at D:\Temp\arduino_build_652018\sketch/commands.h line 363
0x40100304: ets_post(uint8, ETSSignal, ETSParam) at D:\Eigene Dateien\ArduinoData\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\core_esp8266_main.cpp line 160
0x4020f130: ClientContext::_consume(unsigned int) at D:\Eigene Dateien\ArduinoData\packages\esp8266\hardware\esp8266\2.6.3\libraries\ESP8266WiFi\src/include/ClientContext.h line 557
0x402027dd: serialEvent() at E:\Programme\Rasberry - Projekt\Projekt_FHEM\_Arduino\Firmware_SIGNALDUINO\SIGNALDuino-dev-r332_cc1101_200113\___funktionstuechtig_ESP\SIGNALESP/SIGNALESP.ino line 591
0x40202849: loop() at E:\Programme\Rasberry - Projekt\Projekt_FHEM\_Arduino\Firmware_SIGNALDUINO\SIGNALDuino-dev-r332_cc1101_200113\___funktionstuechtig_ESP\SIGNALESP/SIGNALESP.ino line 470
0x40212b68: loop_wrapper() at D:\Eigene Dateien\ArduinoData\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266\core_esp8266_main.cpp line 180

, 👍0

Обсуждение

Ну, он где-то падает, связанный либо с ответом на что-то через WiFi, либо с последовательной командой в commands::HandleShortCommand(). Что вы вводите в качестве входных данных?, @Maximilian Gerhardt

Ввод представляет собой только команду типа V или ? [ссылка](https://github.com/RFD-FHEM/SIGNALDuino/blob/bc3331b2ea5c74e7f9f2f9f10a13c1d5faeed428/commands.h#L121), @user11528497

точно. Что вы ввели? И какова ваша настройка конца строки в последовательном мониторе?, @Maximilian Gerhardt

Я должен ввести V. Если я смотрю на ESP с помощью Netcat и набираю V, я получаю ответ. Если я делаю то же самое с Putty Telnet (порт 23), приходит стек :-( В V 3.4.0-dev SIGNALESP cc1101 (чип CC110 неизвестен) — скомпилировано 8 февраля 2020 г., 16:08:51 ? ? Используйте один из VR t XSPC r W sxe В С переводом строки, но здесь его нет, @user11528497

Я предполагаю, что вы берете скетч с https://github.com/RFD-FHEM/SIGNALDuino, и эта проблема от вас? (https://github.com/RFD-FHEM/RFFHEM/issues/795) Какой именно файл ino вы используете?, @Maximilian Gerhardt

Правильно, здесь [ссылка](https://github.com/HomeAutoUser/ERROR_search/tree/master/SIGNALESP) — тестовый код. Этот код имеет один ino SIGNALESP.ino Таким образом, вы можете видеть все файлы., @user11528497

Да, ошибка воспроизводится с помощью PuTTY. Это как-то связано с окончаниями строк и недопустимыми/пустыми командами. Например, используя ncat -v 192.168.1.135 23 и вводя V, это работает, но с Putty происходит сбой. С конфигурацией PuTTY Terminal -> Local Line Ending: Force Off дела обстоят немного лучше, но пустые команды все еще приводят к сбою. Я посмотрю код., @Maximilian Gerhardt


1 ответ


Лучший ответ:

1

Проблема в том, что такой код, как

            MSG_PRINTLN(TXT_UNSUPPORTED1);

с

#define MSG_PRINTLN(...) { MSG_PRINTER.println(__VA_ARGS__); }

и

static const char TXT_UNSUPPORTED1[]        PROGMEM = "Unsupported short command";

На ESP8266 вызывает функцию println(), которая принимает char*, ожидаемый из ОЗУ. Однако, поскольку строка здесь была помещена во флэш-память, а не в ОЗУ, эта функция завершится сбоем при выполнении.

Исправление заключается в использовании класса __FlashStringHelper, который вызывает правильную перегрузку println() и не дает сбоев.

См. PR https://github.com/HomeAutoUser/ERROR_search/pull/1 и https://arduino-esp8266.readthedocs.io/en/latest/PROGMEM.html

,