Jump to content

    

Eclipse + gdb + Segger

Столкнулся с проблемой - отладка стартует через раз.

 

В наличии STM32 и клон JLink'а от otladka.com.ua

 

SEGGER J-Link GDB Server V4.98 Command Line Version
JLinkARM.dll V4.98 (DLL compiled Mar 20 2015 18:23:08)
-----GDB Server start settings-----
GDBInit file:				  none
GDB Server Listening port:	 2331
SWO raw output listening port: 2332
Terminal I/O port:			 2333
Accept remote connection:	  localhost only
Generate logfile:			  off
Verify download:			   on
Init regs on start:			on
Silent mode:				   off
Single run mode:			   on
Target connection timeout:	 0 ms
------J-Link related settings------
J-Link Host interface:		 USB
J-Link script:				 none
J-Link settings file:		  none
------Target related settings------
Target device:				 STM32F105VC
Target interface:			  SWD
Target interface speed:		1000kHz
Target endian:				 little

Connecting to J-Link...
J-Link is connected.
Firmware: J-Link V9 compiled Apr 21 2015 18:10:40
Hardware: V9.10
S/N: /* i'm paranoid */
Feature(s): GDB, RDI, FlashBP, FlashDL, JFlash
Checking target voltage...
Target voltage: 2.99 V
Listening on TCP/IP port 2331
Connecting to target...Connected to target
Waiting for GDB connection...Connected to 127.0.0.1
Reading all registers
Read 4 bytes @ address 0x00000000 (Data = 0x2000FFF8)
Target interface speed set to 1000 kHz
Select auto target interface speed (2000 kHz)
Flash breakpoints enabled
Semi-hosting enabled (VectorAddr = 0x08)
Semihosting I/O set to TELNET Client
SWO disabled succesfully.
SWO enabled succesfully.
Read 4 bytes @ address 0x00000000 (Data = 0x2000FFF8)
Downloading 56 bytes @ address 0x0801C000 - Verified OK
Downloading 2904 bytes @ address 0x0801C038 - Verified OK
Downloading 4 bytes @ address 0x0801CB90 - Verified OK
Comparing flash   [....................] Done.
Erasing flash	 [..........ERROR: Failed to erase sectors 56 @ address 0x0801C000 (erase error)
..........] Done.
Verifying flash   [....................] Done.

 

Спотыкается на стирании первой же используемой страницы (почему перед этим запись с верификацией прошла?! там точно ДРУГАЯ прошивка!).

Дальше делает вид, что всё окей, и запускает отладку.

Если отладку остановить, видно, что первая используемая страница пустая, остальные - со старым содержимым.

 

Со второго раза прошивается корректно.

 

Собственно, вопросы:

- кто-нибудь сталкивался?

- кто это вообще пишет? gdb или segger ? Поиграть версией сеггеровских утилит?

- может, openocd поможет? они ж нормально работают с SWD и SWO ?

 

 

И вопрос чуть не в тему. Как к eclipse'у приделать кнопку "залить прошивку, отладку не запускать" ?

Edited by IgorKossak
[codebox] для длинного кода, [code] - для короткого!

Share this post


Link to post
Share on other sites

Интересно!

МК на чём стоит? своя плата или покупная готовая, отладочная? Проблем с питанием, подтяжками нет? Маловероятно, но вдруг: кондёры по питанию стоят? Мало ли, просадка по питанию при стирании идёт...

Ещё была история - кварц сбойно работал, иногда МК при подключении и попытке стирания выдавал защиту от перезаписи... помогало выключение на 30-90 минут.

В общем, мне кажется проблема в области железа!

 

С другой стороны - каким образом стирается память? Напрямую через SWD? Попробовать скорость понизить подключения...

Share this post


Link to post
Share on other sites

попробуйте OpenOCD, он с версии 0.9.0 у меня нормально с SWD через J-Link заработал...

 

Share this post


Link to post
Share on other sites
Интересно!

МК на чём стоит? своя плата или покупная готовая, отладочная? Проблем с питанием, подтяжками нет? Маловероятно, но вдруг: кондёры по питанию стоят? Мало ли, просадка по питанию при стирании идёт...

Своё. Опытный образец, паяный-перепаяный, но очевидных косяков с питанием нету.

Подозреваю, что из-за моих экспериментов "уплыли" стандартные тайминги стирания памяти (я перепрограммирую чип десятки раз в день. уже не первый месяц).

Всё никак не одолжу у коллег других подопытных...

 

С другой стороны - каким образом стирается память? Напрямую через SWD? Попробовать скорость понизить подключения...

Не понял вопрос. "Напрямую" из чипа загрузчик чудесно всё стирает, но я им редко пользуюсь.

 

 

попробуйте OpenOCD, он с версии 0.9.0 у меня нормально с SWD через J-Link заработал...

Я хоть и положительно отношусь к опенсорсу, но тут трындец какой-то... :-(

Драйвера на jlink переставил (как теперь, интересно, j-flash'ем пользоваться?..). Покурил интернет, написал конфиг.

Теперь следующий этап: у Вас SWO работает? Гугл сходу магическое слово не подсказывает.

Но пишет-стирает без проблем, тьфу-тьфу...

Share this post


Link to post
Share on other sites
Теперь следующий этап: у Вас SWO работает?

SWO не пробовал. Убедился что отладка/заливка идёт и стал дальше использовать адаптер на FT2232, у которого второй интерфейс для приёма отладочного выхлопа через UART...

Share this post


Link to post
Share on other sites
В 15.10.2015 в 11:52, esaulenka сказал:

Столкнулся с проблемой - отладка стартует через раз

У меня тоже проблема с gdb возникла. В win10 x64, установлена gnu-mcu-eclipse toolchain, и xpack, это arm-none-eabi-gcc, openocd.

Не переходит к коду и не останавливается на breakpoints. На main() не останавливается. Но прошлый рабочий проект записывает и ассемблер показывает.

Пробовал собирать с разными вариантами -O0 -Og -g3 включал в linker -nostdlib --specs=rdimon.specs  но нет, gdb не останавливает на С коде. 

Создал на template новые проекты stm32. Кнопки переходов не работают. Для конфигурации Debug GDB SEGGER jlink Debugger :

сообщение Faled to execute MI command -exec-next 1

GDB jlink

 

а для GDB openocd : нет драйвера winusb, поставил Zylin но нет, не подходит.

GDB openocd

Как в отладку то перейти? 

 

 

Share this post


Link to post
Share on other sites
10 minutes ago, Terrabyte said:

Не переходит к коду и не останавливается на breakpoints

Судя по картинкам, исполняется код из RAM, а брекпоинты вы ставите во флеше. Либо что-то с ногами BOOT, либо что-то хитрое со скриптом линкера.

Share this post


Link to post
Share on other sites

Flash, то есть собрано во flash: в test3.lst

080001e4 <_start>:
_start():

и boot на flash BT0, BT1 = 0, 0 померил, но вот почему gdb не сообщается с кодом? В начале получалось поймать brakepoint в потоке другом, но не в main(), а теперь не работают кнопки переходов по asm.

openocd скрипт: 

source [find interface/jlink.cfg]
#transport select hla_swd              не поддерживается пишет
source [find target/stm32f1x.cfg]

#reset_config srst_only                 не поддерживает
#reset_config none

adapter_khz 4000

Share this post


Link to post
Share on other sites
21 час назад, esaulenka сказал:

Судя по картинкам, исполняется код из RAM, а брекпоинты вы ставите во флеше. Либо что-то с ногами BOOT, либо что-то хитрое со скриптом линкера.

Один gdb заработал, который GDB jlink Debugging, дело в его конфигурации и в Reset.

GDB jlink

Сразу все breakpoints заработали и main() и _start().

nReset в этом CPU можно использовать только для кнопки, а в отладке использовать нужно Reset Types: 1-5 

А с openocd GBD вопрос, надо разбираться как libusbK работает

openocd gdb test 2

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this