|
Как настроить GDB для ARM в Sublime Text? |
|
|
|
Sep 26 2015, 08:56
|

Участник

Группа: Участник
Сообщений: 25
Регистрация: 13-09-15
Пользователь №: 88 376

|
Сделал в 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 - Sep 26 2015, 17:57
|
|
|
|
|
Sep 26 2015, 10:43
|

Участник

Группа: Участник
Сообщений: 25
Регистрация: 13-09-15
Пользователь №: 88 376

|
На сколько я понял, для отладки в GDB нужно запустить openocd (с параметром gdb_port 3333) и уже из gdb выполнить подключение к openocd (target remote localhost:3333). Вот я выполняю следующее: Код openocd -f interface/stlink-v1.cfg -f board/stm32vldiscovery.cfg И получаю ошибку:
Сообщение отредактировал r44083 - Sep 26 2015, 11:10
|
|
|
|
|
Sep 26 2015, 14:06
|

Участник

Группа: Участник
Сообщений: 25
Регистрация: 13-09-15
Пользователь №: 88 376

|
Цитата(smalcom @ Sep 26 2015, 15:43)  как видите, что-то там не поддерживается. может проблема в том, что не переключены драйвера, которые используются для stlink_v1. Тогда используйте программу "zadig".
--------- и с картинками чёто сделайте. проблема в отладчике, а не текстовом редакторе. и даже будь проблема в нём... используйте Win+R, mspaint, Enter Только что пробовал переключить драйвер с помощью Zadig. Ставил: WinUSB, libusbK, libusb-win32 - ничего их этого не убрало ошибку как на скриншоте.
|
|
|
|
|
Sep 26 2015, 15:05
|

Участник

Группа: Участник
Сообщений: 25
Регистрация: 13-09-15
Пользователь №: 88 376

|
Цитата(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 - Sep 26 2015, 18:00
|
|
|
|
|
Sep 26 2015, 16:59
|

Участник

Группа: Участник
Сообщений: 25
Регистрация: 13-09-15
Пользователь №: 88 376

|
Спешу сообщить, что всё получилось. Всего то надо было нажать на паузу во время отладки и далее уже можно "шагать". На данный момент видны регистры ядра, дизассемблер и т.д. Может кто подсказать, почему не видны регистры периферии? Что я делаю не так? Кстати вот строка вывода из лога 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. Что же делать?
|
|
|
|
|
Sep 26 2015, 18:02
|

Участник

Группа: Участник
Сообщений: 25
Регистрация: 13-09-15
Пользователь №: 88 376

|
Цитата(smalcom @ Sep 26 2015, 20:14)  если вы с картинками разобраться не можете, то дальше мне тяжело будет объяснить. Если вы о размере скриншотов, которые я выложил в этой теме - то я их исправил и уменьшил. А на счет того, что после использования Zadig не удается пользоваться ST-LINK CLI, то вот я специально видео снял: https://copy.com/pHXdmG1EFNLO04EC(кнопка для скачивания в правом верхнем углу)
|
|
|
|
|
Sep 27 2015, 04:36
|

Профессионал
    
Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718

|
Zadig не имеет возможности вернуть драйвера "устройства хранения". Это уже придётся вручную. Используйте другие программы. Можно попробовать ST-Link Utility. Цитата То есть openocd не передает в GDB регистры периферии? отладчики не своевольничают: пришёл запрос - получите данные, нет запроса - нет данных. Посмотрите статьи о настройке GDB для ARM. использование sublime text для ARM - маргинальщина. Чтобы к этому прийти надо либо хорошо разбираться во всей подноготной, либо прочитать статью маргинала, который использует этот sublime text. Попробуйте Em::Blocks.
|
|
|
|
|
Sep 27 2015, 05:08
|

Участник

Группа: Участник
Сообщений: 25
Регистрация: 13-09-15
Пользователь №: 88 376

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

Профессионал
    
Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718

|
Цитата вы бы ещё ардуино эдитор посоветовали или notepad ++ ню-ню Цитата Вы вообще саблаймом когда-нибудь пользовались? раз вы такой специалист, то куда уж мне. дерзайте.
|
|
|
|
|
Sep 27 2015, 07:46
|

Участник

Группа: Участник
Сообщений: 25
Регистрация: 13-09-15
Пользователь №: 88 376

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

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (Nixon @ Sep 27 2015, 22:29)  Не отвлекайтесь. Лучше напишите методику получения из sublime этой самой ide. Думаю она будет интересна. А что, есть сомнения в результате? Я очень мельком смотрел на sublime, но произвела очень хорошее впечатление, как база для построения инструмента под себя любимого. Сочетания некоего, пусть закрытого, но сопровождаемого движка и plugin очень обнадеживают. Не влезал, насколько он из plugin-нов состоит и доступность их исходников. Если исходники доступны и движек это именно движек а не уже полуготовая IDE, то штучка очень перспективная. Ради такого можно и с питоном сожительствовать  .
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|