Phriction Witaj na wiki Hackerspace Kraków! Poradniki STM32 Debugowanie za pomocą openocd+gdb+stlinkv2
Debugowanie za pomocą openocd+gdb+stlinkv2
Debugowanie za pomocą openocd+gdb+stlinkv2
Debugowanie za pomocą openocd+gdb+stlinkv2
Zakładając, że używasz makefile z działu cmsis_gcc. Zakładam także, że dysponujesz STLinkv2 (albo jego podróbką (ebay, ebay, ebay!), ew. łatwo zrobić taki dongle samemu, w środku siedzi nic innego jak STM32F101CBT6)
- Podpinasz dongle do komputera, łączysz do procka GND, SWCLK, SWDIO, ew. VCC jak nie zasilasz go osobno z zasilacza
- Z użytkownika "root" albo innego, który ma możliwość bezpośredniego pisania po urządzeniach usb odpalasz debugserver, winno to wyglądać jakoś tak.
# make debugserver openocd -f /usr/share/openocd/scripts/interface/stlink-v2.cfg -f /usr/share/openocd/scripts/target/stm32f1x_stlink.cfg Open On-Chip Debugger 0.7.0 (2013-08-04-09:35) Licensed under GNU GPL v2 For bug reports, read http://openocd.sourceforge.net/doc/doxygen/bugs.html Info : This adapter doesn't support configurable speed Info : STLINK v2 JTAG v20 API v2 SWIM v4 VID 0x0483 PID 0x3748 Info : Target voltage: 3.198419 Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
I zostawiasz go w tle... Jakbyś restartował serwer (bo czasami się coś spieprzy) to jakby coś nie chodziło odłącz i podłącz dongla do komputera na nowo..
- W innej konsoli (już jako normalny użytkownik) odpal gdb
$ make debug (echo "target remote localhost:3333"; cat) | arm-none-eabi-gdb main.elf GNU gdb (GNU Tools for ARM Embedded Processors) 7.6.0.20140228-cvs Copyright (C) 2013 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "--host=i686-linux-gnu --target=arm-none-eabi". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... Reading symbols from stm32/projekty/blink/main.elf...done. (gdb) Remote debugging using localhost:3333 0x00000000 in ?? ()
- GDB podłączy się do openocd i możesz zacząć wydawać komendy.
- Na początek dobrze jest zresetować procek i od razu zatrzymać wykonywanie kodu
(gdb) monitor reset halt target state: halted target halted due to debug-request, current mode: Thread xPSR: 0x01000000 pc: 0x0800010c msp: 0x20005000 (gdb)
- Za pomocą "load" możemy wgrać kod na procka
(gdb) load Loading section .isr_vector, size 0x10c lma 0x8000000 Loading section .text, size 0x2d4 lma 0x800010c Loading section .data, size 0x4 lma 0x80004cd Start address 0x800010c, load size 996 Transfer rate: 7 KB/sec, 332 bytes/write. (gdb)
- No i teraz już możemy używać gdb dalej jak przy debugowaniu normalnego programu na komputerze :)
(gdb) info br No breakpoints or watchpoints. (gdb) br main.c:30 Breakpoint 1 at 0x800039c: file src/main.c, line 30. (gdb) c Continuing. Note: automatically using hardware breakpoints for read-only addresses. Breakpoint 1, main () at src/main.c:30 30 GPIO_SetBits(GPIOA, GPIO_Pin_1); (gdb) Continuing. Breakpoint 1, main () at src/main.c:30 30 GPIO_SetBits(GPIOA, GPIO_Pin_1); (gdb) Continuing. Breakpoint 1, main () at src/main.c:30 30 GPIO_SetBits(GPIOA, GPIO_Pin_1); (gdb) Continuing. Breakpoint 1, main () at src/main.c:30 30 GPIO_SetBits(GPIOA, GPIO_Pin_1); (gdb) bt #0 main () at src/main.c:30 (gdb) delete 1 (gdb) br delay_ms Breakpoint 2 at 0x800039a: delay_ms. (2 locations) (gdb) c Continuing. Breakpoint 2, main () at src/main.c:33 33 delay_ms(100); (gdb)
- Last Author
- jkramarz
- Last Edited
- Jan 11 2019, 3:48 PM