Pull to refresh

Настройка Пошаговой Отладки JLink+Eclipse

Level of difficultyMedium
Reading time4 min
Views4.7K

Классическая ситуация. Записали через интерфейс SWD прошивку и... ничего не происходит. HeartBeat LED не мигает. Boot лог в UART(е) не появляется. CLI не отвечает. Вероятно прошивка где-то свалилась в Hard Fault Handler. Причем прямо в инициализации еще до запуска супер цикла внутри функции main(). Обратилась к несуществующей памяти. Что же делать? Как понять, где ошибка, чтобы принять меры?

Можно конечно включать и исключать перед сборкой куски программы и прошивать пока не выясним ту проблемную функцию. Но это может занять очень много времени. Целый день.

Есть ли более эффективный способ? Да. Тут выручит пошаговая GDB отладка. А для этого надо настроить и запустить GDB сервер и GDB клиент.

Про пошаговую отладку в консоли у меня есть отдельный пост.

Однако пошаговая отладка в консоли может показаться утомительной. Куда проще пошагово отлаживаться прямо в текстовом редакторе, например в Eclipse.

Что надо из оборудования?

оборудование

Назначение

кабель USB-A USB micro

Для подключения программатора к NetTop PC

отладочная плата (например nrf5340-DK)

для пошаговой отладки прошивки в микроконтроллере

программатор J-Link

для пошаговой отладки микроконтроллера

LapTop

для запуска утилит

Что надо из софтвера?

Утилита

Назначение

JVM

Виртуальная машина для прокрутки текстового редактора eclipse

JLinkGDBServer.exe

GDB сервер

nrfjprog.exe

утилита, чтобы прошить микроконтроллер семейства nrf

arm-none-eabi-gdb.exe

GDB клиент

eclipse.exe

Текстовый редактор

Фаза 1. Установить GNU ToolChain для Arm Embedded

Подробнее про это тут

Надо прописать в переменную Path путь к ARM ToolChain(у): препроцессору, компилятору, асcембреру, компоновщику, binutils(ам), отладчику.

C:/Program Files (x86)/GNU Arm Embedded Toolchain/10 2021.10/bin

Проверить корректность установки GNU Toolchain можно выполнив команду arm-none-eabi-gcc --version в консоли Windows

Фаза 2. Запустить GDB Сервер Отладки

В качестве сервера отладки можно использовать утилиту JLinkGDBServer.exe.
C:\Program Files (x86)\SEGGER\JLink\JLinkGDBServer.exe

Можно даже накропать простенький скрипт, чтобы не настраивать каждый раз мышкой настройки JLink GDB Server(а)

 
echo off
cls
set GDBServerOpt = -select USB -device nRF5340_xxAA_APP -endian little -if SWD -speed 400 -ir -LocalhostOnly -logtofile -log "C:\projects\code_base_workspace\code_base_firmware\tool\GdbServerLog.txt"

set GDBServerDir="C:\Program Files (x86)\SEGGER\JLink\"
set GDBServerPath=%GDBServerDir%JLinkGDBServer.exe"
cd %GDBServerDir%
call %GDBServerPath% %GDBServerOpt%

В настройках JLink GDB Server(а) надо проверить интерфейс соединения с платой. В данной плате это USB. Проверить интерфейс соединения программатора и целевого микроконтроллера. В данной схемотехнике это SWD. Проверить, что выбрано нужное процессорное ядро. В данном случае это nRF5340_xxAA_APP. Если всё верно, то нажимаем ок.

JLink GDB Server переходит в режим ожидания подключения к GDB клиенту.

Вот примерный лог успешного подключения после запуска GDB клиента.

Фаза 3. Настройка GDB Клиента

Надо открыть меню Debug Configuration, создать конфигурацию и указывает путь к *.elf файлу

На вкладке Debugger указать путь к GDB клиенту arm-none-eabi-gdb.exe.

Можно прописать полный путь к GDB клиенту
C:\Program Files (x86)\GNU Arm Embedded Toolchain\10 2021.10\bin\arm-none-eabi-gdb.exe

Настроить вкладку Startup.

ставим, что надо остановиться на функции main

Настроить вкладку Common, как показано на скриншоте

Теперь достаточно нажать кнопку Debug и можно производить пошаговую отладку

получилась такая схема взаимодействия утилит

вот кстати скрипт для пере прошивки. Микроконтроллер Nrf5340 можно пере прошить утилитой nrfjprog.exe.

echo off
cls

set project_name=nrf5340_dk_nortos_decadriver_m
set project_dir=%cd%
set workspace_dir=%cd%\..\..\..\
set tool_dir=%cd%\..\..\..\tool
echo project_dir=%project_dir%
set artefact_hex=%project_dir%\build\%project_name%.hex
echo artefact_hex=%artefact_hex%
::set FlashTool="C:\Program Files (x86)\Nordic Semiconductor\nrf-command-line-tools\bin\nrfjprog.exe"
set FlashTool=nrfjprog

call %project_dir%\recover.bat

set options=--iface USB --family NRF53 --coprocessor CP_APPLICATION --program %artefact_hex%  --log --chiperase --verify --reset 
call %FlashTool% %options%
echo workspace_dir=%workspace_dir%
echo tools_dir=%tools_dir%
call %tool_dir%\launch_terminal.bat 10 460800 "nrf5340_dk_nortos_decadriver_m"

Вывод

Если говорить по честному, то всё, что требуется от пошаговой GDB отладки это максимум отладить запуск полнодуплексного UART. Далее просто подключается интерфейс командной строки и вся последующая отладка идет через UART-CLI.

А в CLI(Shell) как раз есть возможность прицельно вычитывать куски данных из физической памяти (регистры, RAM, Flash), искать адреса по значениям (аналог утилиты Art Money), читать и дергать GPIO, пулять пакеты в SPI, I2C, перезагружать ядро, запускать конкретные функции зная из адреса из *.map файла да и вообще делать всё, что только душа пожелает.

Словарь

Акроним

Расшифровка

CLI

Command-line interface

UART

universal asynchronous receiver-transmitter

LED 

light-emitting diode

RISC

reduced instruction set computer

JVM

Java virtual machine

PC

personal computer

UNIX

UNiplexed Information Computing System

ARM

Advanced RISC Machine

SWD

Serial Wire Debug

USB

Universal Serial Bus

GNU

GNU's Not UNIX

GDB

GNU Debugger 

Ссылки

https://bitknitting.wordpress.com/2015/07/11/using-eclipse-to-program-the-nrf51822/
https://dev.px4.io/v1.10_noredirect/en/debug/eclipse_jlink.html
https://eclipse-embed-cdt.github.io/debug/jlink/
https://habr.com/ru/company/rainbow/blog/251053/
https://habr.com/ru/post/215483/
https://habr.com/ru/post/578830/
https://habr.com/ru/post/673522/https://habr.com/ru/post/694708/https://habr.com/ru/post/694408/https://habr.com/ru/post/681280/
https://karibe.co.ke/2014/03/debugging-arm-freescale-microcontrollers-with-j-link-gdb-server-and-gnu-arm-toolchain-gdb-with-semihosting-in-linux/
https://mcuoneclipse.com/2019/09/22/eclipse-jtag-debugging-the-esp32-with-a-segger-j-link/
https://mcuoneclipse.com/2022/07/16/getting-started-raspberry-pi-pico-rp2040-with-eclipse-and-j-link/

Only registered users can participate in poll. Log in, please.
Вы программировали микроконтроллеры?
86.36% да19
13.64% нет3
22 users voted. Nobody abstained.
Only registered users can participate in poll. Log in, please.
Вы используете пошаговую отладку при разработке прошивок?
81.82% да18
18.18% нет4
22 users voted. Nobody abstained.
Only registered users can participate in poll. Log in, please.
Какой способ пошаговой отладки используете вы?
4.35% из консоли1
95.65% из IDE22
23 users voted. Nobody abstained.
Tags:
Hubs:
Total votes 2: ↑1 and ↓1+1
Comments4

Articles