poohnet Geschrieben March 11, 2023 at 21:18 Geschrieben March 11, 2023 at 21:18 Hallo zusammen, gibt es eine Möglichkeit Programme, die auf dem ESP32-Brick laufen, zu debuggen? Für die „normalen“ ESP32-Boards gibt es ja z. B. den ESP-Prog, der im Zusammenspiel mit Visual Studio Code gut funktioniert. Wie macht ihr das bei der Entwicklung? Ausschließlich über den Logger oder gibt es noch andere Möglichkeiten? Vielen Dank und Gruß Thomas Zitieren
Backdraft007 Geschrieben March 13, 2023 at 13:41 Geschrieben March 13, 2023 at 13:41 Wenn ich das richtig sehe, ist die JTAG-Schnittstelle nicht nach außen gführt. Diese ist aber für das Debugging erforderlich. So bleibt nur die Ausgabe der Logging-Funktion über die serielle Schnuittstelle. Zitieren
poohnet Geschrieben March 14, 2023 at 06:48 Autor Geschrieben March 14, 2023 at 06:48 Das hatte ich auch befürchtet. Die vorhandenen IO-Ports passen ja leider auch nicht wirklich (außer man könnte diese umdefinieren). @rtrbt, @photron: Wie debugged ihr den ESP32-Brick? Auch nur über Logging oder gibt es vielleicht ein "inoffizielles" Debug-Bricklet o. ä.? Danke & Gruß Thomas Zitieren
rtrbt Geschrieben March 14, 2023 at 08:08 Geschrieben March 14, 2023 at 08:08 Die ESP-Firmware selbst debuggen wir auch nur über das Logging. Die JTAG-Pins sind in der Tat nicht rausgeführt, wenn ich mich richtig erinnere (bin nicht der Hardware-Entwickler) lag das daran, dass wir vor allem beim Ethernet-Brick zu wenig GPIOs hatten. Für die Kommunikation zwischen Brick und Bricklet kannst du entweder ein Bricklet-Kabel schlachten oder zwei Breakout Bricklets zusammenlöten https://www.tinkerforge.com/de/shop/breakout-bricklet.html und mit einem Logic Analyzer mitlesen. Wir haben intern eine neuere Variante für die 7-Pol-Bricklets, meines Wissens verkaufen wir die aber nicht. Zitieren
poohnet Geschrieben March 14, 2023 at 08:35 Autor Geschrieben March 14, 2023 at 08:35 Alles klar, vielen Dank. Aktuell arbeite ich weiter an einem Backend-Modul zum Auslesen der Daten des SMA Energy Meter / Home Manager 2.0, da passiert viel mit Arrays und Pointern und man hat schnell Abstürze provoziert, die ausschließlich mit Logging etwas mühselig zu finden sind. Vielleicht ist das Modul später auch mal für den WARP Energy Manager interessant... Zitieren
rtrbt Geschrieben March 14, 2023 at 08:54 Geschrieben March 14, 2023 at 08:54 Wenn du Abstürze debuggen willst hast du noch zwei weitere Optionen: Du bekommst du auf der seriellen Konsole beim Crash einen Backtrace, den du mit dem decode-Script (in esp32-firmware/software) dekodieren kannst. Das Script wählt automatisch die zuletzt gebaute ELF-Datei aus um den Backtrace zu dekodieren. Du kannst noch den Inhalt des PC-Registers (das ist der Program Counter, also die Instruktion die gerade ausgeführt wird) vorne an den Backtrace anhängen, dann wirds genauer. Wenn du also z.B. folgenden Backtrace bekommst: Guru Meditation Error: Core 1 panic'ed (LoadProhibited). Exception was unhandled. Core 1 register dump: PC : 0x40117aeb PS : 0x00060b30 A0 : 0x800ec077 A1 : 0x3ffc8e50 A2 : 0x3ffb6e74 A3 : 0x00000004 A4 : 0xffffffff A5 : 0x3ffc8dc8 A6 : 0x3ffc8e70 A7 : 0x00000000 A8 : 0x80117ae9 A9 : 0x3ffc8de0 A10 : 0x505a9d89 A11 : 0x505a9d89 A12 : 0x3ffc5608 A13 : 0x3ffb513c A14 : 0x3ffcef1c A15 : 0x3ffc9970 SAR : 0x00000015 EXCCAUSE: 0x0000001c EXCVADDR: 0x00000004 LBEG : 0x4000c46c LEND : 0x4000c477 LCOUNT : 0x00000000 Backtrace: 0x40117ae8:0x3ffc8e50 0x400ec074:0x3ffc8e90 0x40179a1e:0x3ffc9190 dann kannst du den (mit PC-Register) so dekodieren: ./decode 0x40117aeb 0x40117ae8:0x3ffc8e50 0x400ec074:0x3ffc8e90 0x40179a1e:0x3ffc9190 und bekommst dann: Using toolchain-xtensa-esp32@8.4.0+2021r2-patch3 package 0x00000000: ?? ??:0 0x40117ae8: EVSEV2::setup() at /home/erik/Tinkerforge/esp32-firmware/software/src/modules/evse_v2/evse_v2.cpp:400 0x400ec074: setup() at /home/erik/Tinkerforge/esp32-firmware/software/src/main.cpp:244 0x40179a1e: loopTask(void*) at /home/erik/Tinkerforge/esp32-firmware/software/packages/arduino-esp32#warp2-2.0.9_9326b6026102e72489017bcf1c8fa08d0084e30f/cores/esp32/main.cpp:42 evse_v2.cpp Zeile 400 ist bei mir gerade int blah = *((int*)0x04); logger.printfln("%d\n", blah); um den Crash zu provozieren. Option zwei ist, dass der ESP, wenn er crasht, seit kurzem einen Coredump in die entsprechende Partition schreibt. Wenn du das Debug-Modul reinkompilierst, dann kannst du unter warp2-abc/debug/coredump.elf den Coredump runterladen und mit https://github.com/espressif/esp-coredump auseinandernehmen. Zitieren
poohnet Geschrieben March 14, 2023 at 12:02 Autor Geschrieben March 14, 2023 at 12:02 Stimmt, das "Post-Mortem-Debugging" hatte ich gar nicht mehr auf dem Schirm! Vielen Dank 🙂 Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.