Hallo,
bisher habe ich mich mit dem Thema Debuggen von Mikrocontrollern nur sehr am Rande auseinander gesetzt. Doch im Rahmen eines Projekts musste auch mal ein komplizierter Fehlerzustand analysiert werden. Da aus Budgetgründen nicht die von Nordic vertriebenen Entwicklungsboards und auch nicht KEIL oder nrfStudio verwendet wurde sondern alles mit GNU unter Linux entwickelt werden sollte, blieb beim Debuggen nur gdb in der Wahl. Auch zur Verbindung des nRF51822 mit dem Computer wurde wurde nicht ein Segger Produkt verwendet, sondern ein ST-Link V2.
Letztendlich waren folgende Schritte nach neuer Installation der Linux Variante
Ubuntu 16.04 (Xenial Xerus) notwendig:
sudo apt-get install git
sudo apt-get install autoconf
sudo apt-get install libusb-1.0-0-dev- Bauen und Installtion der USB Treiber für den ST-Link V2
(
https://github.com/texane/stlink stlink.git)
git clone https://github.com/texane/stlink stlink.git
cd stlink.git/
./autogen.sh
./configure
make
sudo cp st-* /usr/bin
sudo cp ./etc/udev/rules.d/49-stlinkv2.rules /etc/udev/rules.d- Bauen und Installtion von openocd
(git://git.code.sf.net/p/openocd/code openocd-code)
git clone git://git.code.sf.net/p/openocd/code openocd-code
cd openocd-code/
./bootstrap
./configure
make
sudo make install
- Download und Auspacken GCC
https://launchpad.net/gcc-arm-embedded/5.0/5-2016-q1-update/+download/gcc-arm-none-eabi-5_3-2016q1-20160330-linux.tar.bz2
z.B. über tar xvjf gcc-arm-none-eabi-5_3-2016q1-20160330-linux.tar.bz2
- Download und Auspacken nRF5 SDK
https://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v11.x.x/nRF5_SDK_11.0.0_89a8197.zip
z.B. unzip nRF5_SDK_11.0.0_89a8197.zip
- Kompilieren der C-Quellcodes mit gcc (arm-none-eabi-gcc mit Schalter -O0 -g)
make
- flashen mit openocd und telnet
Beispiel openocd.cfg
#nRF51822 Target
source [find interface/stlink-v2.cfg]
transport select hla_swd
set WORKAREASIZE 0x4000
source [find target/nrf51.cfg]
openocd -d2 openocd.cfg
telnet 127.0.0.1 4444
halt nrf51 mass_erase (nur beim ersten mal notwendig)
program <pfad>/blinky.hex verify
reset
- Debuggen mit openocd und gdb (arm-none-eabi-gdb)
arm-none-eabi-gdb -ex “target remote :3333“ blinky.out
list main (Zeilennummern Anzeigen)
break blinky.c:Zeilennummer (Breakpoint setzen)
continue (gdb stoppt bei Zeilennummer)
step oder next bis zur Fehlerhaftenzeile
print Variable auswerten
clear blinky.c:Zeilennummer (Breakpoint löschen)
continue (weiter ohne Breakpoints)
weitere Infos unter https://www.youtube.com/playlist?list=PLxJ8_KSR8bp6XCGlEVSwO6zdMXLkDi2lT
Viel Spaß beim Debuggen
pcbreflux