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
@user11528497, 👍0
Обсуждение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
- Как читать и записывать EEPROM в ESP8266
- Как исправить: Invalid conversion from 'const char*' to 'char*' [-fpermissive]
- ошибка: espcomm_upload_mem failed при загрузке скетча
- Как определить размер Flash?
- Несколько клиентских серверов через Wi-Fi
- Передача функции-члена класса в качестве аргумента
- В ESP-12E NodeMCU, какой выход PIN A0?
- Esp8266 Vin контакт
Ну, он где-то падает, связанный либо с ответом на что-то через 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