Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как настроить GDB для ARM в Sublime Text?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
r44083
Сделал в Sublime Text 3 что-то похожее на IDE для ARM на основе arm-none-eabi-*, make, clang и ST-LINK_CLI. Теперь дело дошло для отладчика.
Установил плагин SublimeGDB, (PATH для GDB уже прописан). Ниже привожу настройки только для SublimeGDB, которые указал в настройках проекта:
Код
"settings":
  {
    "sublimegdb_commandline": "arm-none-eabi-gdb --interpreter=mi ARM-test0.elf",
    "sublimegdb_workingdir": "${folder:${project_path:ARM-test0.elf}}"
  }

Нажимаю в Sublime F5 и появляются вкладки плагина SublimeGDB:

Вот лог вывода во вкладке "GDB Session":
CODE

1-gdb-show interpreter
=thread-group-added,id="i1"
~"GNU gdb (GNU Tools for ARM Embedded Processors) 7.8.0.20150604-cvs\n"
~"Copyright © 2014 Free Software Foundation, Inc.\n"
~"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\nThis is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permitted by law. Type \"show copying\"\nand \"show warranty\" for details.\n"
~"This GDB was configured as \"--host=i686-w64-mingw32 --target=arm-none-eabi\".\nType \"show configuration\" for configuration details."
~"\nFor bug reporting instructions, please see:\n"
~"<http://www.gnu.org/software/gdb/bugs/>.\n"
~"Find the GDB manual and other documentation resources online at:\n<http://www.gnu.org/software/gdb/documentation/>.\n"
~"For help, type \"help\".\n"
~"Type \"apropos word\" to search for commands related to \"word\"...\n"
~"Reading symbols from ARM-test0.elf..."
~"done.\n"
(gdb)
1^error,msg="Undefined show command: \"interpreter\". Try \"help show\"."
(gdb)
2-inferior-tty-set c:\users\pc1\appdata\local\temp\tmpoh0opi
2^done
(gdb)
3-gdb-set target-async 1
4-gdb-set pagination off
5-gdb-set disassembly-flavor intel
6-break-insert "\"d:/4 electronics/soft/sublime text projects/arm-test0/user-code/main.cpp\":36"
3^done
(gdb)
4^done
(gdb)
5^error,msg="No symbol \"disassembly\" in current context."
(gdb)
6^done,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x080002f4",func="main()",file=".\\user-code/main.cpp",fullname="D:\\4 electronics\\soft\\Sublime Text projects\\ARM-test0\\user-code\\main.cpp",line="36",thread-groups=["i1"],times="0",original-location="d:/4 electronics/soft/sublime text projects/arm-test0/user-code/main.cpp:36"}
(gdb)
7-exec-run
7^error,msg="Don't know how to run. Try \"help target\"."
(gdb)

И на этом всё. "gdb_step_over" (F10), "gdb_step_into" (F11) и остальные команды не работают.
Я подозреваю, что в строке GDB "5^error,msg="No symbol \"disassembly\" in current context." кроется ошибка в вызове GDB.
Также интересует, можно ли будет просматривать в реальном времени регистры периферии с помощью GDB?
Нашел скриншот в интернете с настроенным GDB для Sublime, всё должно выглядеть примерно так:


Вот ссылка на сборку Sublime Text для ARM (она полностью портабельная для Windows): https://copy.com/kJIDxc8rIJenEWm4
Вот ссылка на проект на гитхаб: https://github.com/r44083/ARM-test0
Заранее спасибо.
r44083
На сколько я понял, для отладки в GDB нужно запустить openocd (с параметром gdb_port 3333) и уже из gdb выполнить подключение к openocd (target remote localhost:3333).

Вот я выполняю следующее:
Код
openocd -f interface/stlink-v1.cfg -f board/stm32vldiscovery.cfg

И получаю ошибку:
smalcom
как видите, что-то там не поддерживается. может проблема в том, что не переключены драйвера, которые используются для stlink_v1. Тогда используйте программу "zadig".


---------
и с картинками чёто сделайте. проблема в отладчике, а не текстовом редакторе. и даже будь проблема в нём... используйте Win+R, mspaint, Enter
r44083
Цитата(smalcom @ Sep 26 2015, 15:43) *
как видите, что-то там не поддерживается. может проблема в том, что не переключены драйвера, которые используются для stlink_v1. Тогда используйте программу "zadig".


---------
и с картинками чёто сделайте. проблема в отладчике, а не текстовом редакторе. и даже будь проблема в нём... используйте Win+R, mspaint, Enter

Только что пробовал переключить драйвер с помощью Zadig. Ставил: WinUSB, libusbK, libusb-win32 - ничего их этого не убрало ошибку как на скриншоте.
r44083
Цитата(smalcom @ Sep 26 2015, 17:40) *

Получилось! (после переключения драйвера, я обновил в диспетчере устройств текущий драйвер ST Link на тот, что скачал с сайта ST)
Но вот что дальше
написал простой скрипт для openocd:
Код
telnet_port 4444
gdb_port 3333
source [find interface/stlink-v1.cfg]
transport select hla_swd
set WORKAREASIZE 0x2000
source [find target/stm32f1x.cfg]
reset_config srst_only

При запуске openocd в папке проекта, в консоль выводится следующее:

Когда я из Sublime Text запускаю отладку с помощью GDB, и в диалоге GDB пишу "target remote localhost:3333",
то в консоли openocd появляется сообщение: "undefined debug reason 7 - target needs reset" и в консоли GDB появляется следующее:
CODE

10target remote localhost:3333
&"target remote localhost:3333\n"
~"Remote debugging using localhost:3333\n"
=thread-group-started,id="i1",pid="42000"
=thread-created,id="1",group-id="i1"
~"0x00000000 in ?? ()\n"
*stopped,frame={addr="0x00000000",func="??",args=[]},thread-id="1",stopped-threads="all"
11-thread-select 1
10^done
(gdb)
12-stack-info-frame
11^done,new-thread-id="1",frame={level="0",addr="0x00000000",func="??",args=[]}
(gdb)
12^done,frame={level="0",addr="0x00000000",func="??"}
(gdb)
13-stack-list-frames
13^done,stack=[frame={level="0",addr="0x00000000",func="??"},frame={level="1",addr="0x00000000",func="??"}]
(gdb)
14-stack-list-arguments 1
14^done,stack-args=[frame={level="0",args=[]},frame={level="1",args=[]}]
(gdb)
15-thread-info
15^done,threads=[{id="1",target-id="Remote target",frame={level="0",addr="0x00000000",func="??",args=[]},state="stopped"}],current-thread-id="1"
(gdb)
16-thread-list-ids
16^done,thread-ids={thread-id="1"},current-thread-id="1",number-of-threads="1"
(gdb)
17-stack-list-arguments 0 0 0
17^done,stack-args=[frame={level="0",args=[]}]
(gdb)
18-stack-list-locals 0
18^done,locals=[]
(gdb)

Но ходить по шагам или точкам останова не получается (в логе GDB возникает ошибка: "
23-exec-next
23^error,msg="Cannot find bounds of current function"
(gdb)
") в окне дизассемблера (плагина SublimeGDB) по-прежнему ничего нет, и все регистры равны нулю:


r44083
Спешу сообщить, что всё получилось. Всего то надо было нажать на паузу во время отладки и далее уже можно "шагать".
На данный момент видны регистры ядра, дизассемблер и т.д.
Может кто подсказать, почему не видны регистры периферии? Что я делаю не так?

Кстати вот строка вывода из лога GDB (возможно тут ошибка):
Код
19-data-list-register-names
19^done,register-names=["r0","r1","r2","r3","r4","r5","r6","r7","r8","r9","r10","r11","r12","sp","lr","pc","","","","","","","","","","xPSR","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","msp","psp","primask","basepri","faultmask","control"]

То есть openocd не передает в GDB регистры периферии?


Странный момент обнаружился. После использования Zadig, я уже не могу прошить микроконтроллер, так как ST-Link CLI ругается, что не видит St-link,
а когда откатываю драйвер и st-link нормально работает, то перестает работать openocd ругаясь на libusb.
Что же делать?
smalcom
Цитата
Что я делаю не так?

если вы с картинками разобраться не можете, то дальше мне тяжело будет объяснить.
r44083
Цитата(smalcom @ Sep 26 2015, 20:14) *
если вы с картинками разобраться не можете, то дальше мне тяжело будет объяснить.

Если вы о размере скриншотов, которые я выложил в этой теме - то я их исправил и уменьшил.
А на счет того, что после использования Zadig не удается пользоваться ST-LINK CLI, то вот я специально видео снял: https://copy.com/pHXdmG1EFNLO04EC
(кнопка для скачивания в правом верхнем углу)
smalcom
Zadig не имеет возможности вернуть драйвера "устройства хранения". Это уже придётся вручную. Используйте другие программы. Можно попробовать ST-Link Utility.

Цитата
То есть openocd не передает в GDB регистры периферии?

отладчики не своевольничают: пришёл запрос - получите данные, нет запроса - нет данных. Посмотрите статьи о настройке GDB для ARM.

использование sublime text для ARM - маргинальщина. Чтобы к этому прийти надо либо хорошо разбираться во всей подноготной, либо прочитать статью маргинала, который использует этот sublime text.
Попробуйте Em::Blocks.
r44083
Цитата(smalcom @ Sep 27 2015, 07:36) *
Zadig не имеет возможности вернуть драйвера "устройства хранения". Это уже придётся вручную. Используйте другие программы. Можно попробовать ST-Link Utility.


отладчики не своевольничают: пришёл запрос - получите данные, нет запроса - нет данных. Посмотрите статьи о настройке GDB для ARM.

использование sublime text для ARM - маргинальщина. Чтобы к этому прийти надо либо хорошо разбираться во всей подноготной, либо прочитать статью маргинала, который использует этот sublime text.
Попробуйте Em::Blocks.

Вы так говорите маргинальщина - как будто это что то плохое. По поводу em::blocks, вы бы ещё ардуино эдитор посоветовали или notepad ++ sm.gif
Вы вообще саблаймом когда-нибудь пользовались?
smalcom
Цитата
вы бы ещё ардуино эдитор посоветовали или notepad ++

ню-ню

Цитата
Вы вообще саблаймом когда-нибудь пользовались?

раз вы такой специалист, то куда уж мне. дерзайте.
r44083
Цитата(smalcom @ Sep 27 2015, 09:42) *
ню-ню


раз вы такой специалист, то куда уж мне. дерзайте.

Извините, но вы сами начали в таком тоне.
Nixon
Не отвлекайтесь. Лучше напишите методику получения из sublime этой самой ide. Думаю она будет интересна.
zltigo
QUOTE (Nixon @ Sep 27 2015, 22:29) *
Не отвлекайтесь. Лучше напишите методику получения из sublime этой самой ide. Думаю она будет интересна.

А что, есть сомнения в результате? Я очень мельком смотрел на sublime, но произвела очень хорошее впечатление, как база для построения инструмента под себя любимого.
Сочетания некоего, пусть закрытого, но сопровождаемого движка и plugin очень обнадеживают. Не влезал, насколько он из plugin-нов состоит и доступность их исходников.
Если исходники доступны и движек это именно движек а не уже полуготовая IDE, то штучка очень перспективная. Ради такого можно и с питоном сожительствовать sm.gif.



smalcom
В результате сомнений нет. Можно средой программирования и сборки и Notepad++ сделать(который зачем-то ТС приплёл), а для отладки использовать одну из граф. оболочек GDB.
Фишка в том, что ответы на вопросы ТСа есть на первых страницах поисковиков. Если ТС это игнорирует, значит его интерес чисто академический, а не получение результата.
Саморазвитие можно только поприветствовать.

По снимкам и описанию редактор очень хороший, несмотря на статически прилинкованный питон. Но это всё же пусть очень сильно супер мощный, но всё же редактор. И выбор его
в качестве базы для настройки среды программирования "под себя" - осмысленный(должен быть) шаг.
В остальных случаях рекомендуются к использованию готовые среды для разных случаев: Code::Blocks, Em::Blocks, AVR Studio.
Сравнить Em::Blocks с Arduino IDE и вообще в одном предложении приравнять Arduino IDE и Notepad++ говорит, что ТСу Sublime противопоказан.
zltigo
QUOTE (smalcom @ Sep 27 2015, 23:19) *
рекомендуются к использованию готовые среды для разных случаев: Code::Blocks, Em::Blocks, AVR Studio.

Упаси бог, от разных, готовых для разных случаев. Уже 25 лет назад со всей отчетливостью понял, что
среда должна быть - одна, сделанная под себя так, чтобы быть продолжением кончиков пальцев
и используемая для любых случаев.
smalcom
Ну не так же буквально следует понимать слова.
Вы же в пейнте схемы не рисуете из-за того, что P-CAD сделан специального для этого случая.
zltigo
QUOTE (smalcom @ Sep 27 2015, 23:34) *
Ну не так же буквально следует понимать слова.
Вы же в пейнте схемы не рисуете из-за того, что P-CAD сделан специального для этого случая.

Не путайте рисование "картинок" и работу с текстами. Если "схема" может быть описана текстом, например на Verilog, то все "специальные для этого случая" так-же идут лесом.
smalcom
*верхняяконечностьфронтальнаячастьлица*
r44083
В скором времени я выложу я ютуб видео, в котором опишу, как создать IDE для ARM с помощью Sublime Text.
Конечно же везде есть свои минусы и плюсы, у такой вот сборки на основе Sublime Text, они тоже есть.
Как выложу видео, то отпишусь в этой теме.
r44083
Вот видео Sublime Text как IDE для STM32, кому интересно: https://youtu.be/-8scgw_qNLY
В описании к видео есть уже готовый архивчик с программой, тестовым проектом и настройками.

На 22-ой минуте описана эта проблема:
Настроил отладку с помощью openOCD и GDB (плагин SublimeGDB). Использую микроконтроллер STM32F100RBT6B (ARM Cortex-M3).
В настройках проекта для SublimeGDB пишу:
Код
"sublimegdb_workingdir": "${project_path:out/hex/}",
"sublimegdb_commandline": "arm-none-eabi-gdb --interpreter=mi *.elf"

Вот такие настройки в Makefile для openOCD:
Код
# Настройка openocd для работы с интерфейсом и контроллером:
OPENOCD_PARAMS = -c "source [find interface/stlink-v1.cfg]"
OPENOCD_PARAMS += -c "transport select hla_swd"
OPENOCD_PARAMS += -c "source [find target/stm32f1x.cfg]"

# Настройки openocd для отладки:
OPENOCD_PARAMS_DEBUG = $(OPENOCD_PARAMS)
OPENOCD_PARAMS_DEBUG += -c "gdb_port 3333"
OPENOCD_PARAMS_DEBUG += -c "debug_level 2"
OPENOCD_PARAMS_DEBUG += -c "set WORKAREASIZE 0x2000"
OPENOCD_PARAMS_DEBUG += -c "reset_config srst_only"

В итоге значения регистров отображаются в некорректном виде.
Как отобразить регистры в нормально виде
А также вопрос: как отобразить все регистры периферии микроконтроллера?


Например как это сделано в Keil (на примере NVIC):
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2018 Invision Power Services, Inc.