Используем отладку LPC-Link без CodeRed IDE

Всем привет,
Дошли наконец руки до валяющейся уже год экспрессы с 1768 на борту. Но поскольку CodeRed IDE мне категорически не нравится, появилось стойкое желание завести отладку под любой другой IDE. Что мне отчасти удалось. Опишу, что я сделал, может у кого-то появится идея, как быть дальше.

Работаем в консоли

Во-первых сама CodeRed нам понадобится, будет она выступать в качестве донора gdb-сервера и клиента. Gdb-сервер нужен нам по понятной причине, т.к. других, работающих с lpc-link'ом не наблюдается. А вот с клиентом не все так просто. Теоретически должен работать любой, но с клиентом от yagarto почему-то у меня не получилось ничего — прошивка не стартует, при попытке сделать step, проц падает в HardReset interrupt. Поэтому пока экспериментирую с родным, с ним успехов больше.

Итак, во-первых нам необходимо загрузить прошивку в lpc-link, т.к. контроллер что там стоит, не имеет собственного флеша, зато умеет читать прошивку по USB (DFU).
C:\\nxp\\LPCXpresso_4.0.6_152\\lpcxpresso\\bin\\Scripts\\bootLPCXpresso hid

параметр hid указывает способ соединения с адаптером, в случае Windows 7 используется hid, для winxp — winusb, кажется.

Сотрем прошивку из камня и запишем новую:
C:\\nxp\\LPCXpresso_4.0.6_152\\lpcxpresso\\bin\\crt_emu_cm3_nxp.exe -wire=hid -pLPC1768 -flash-erase
C:\\nxp\\LPCXpresso_4.0.6_152\\lpcxpresso\\bin\\crt_emu_cm3_nxp.exe -wire=hid -pLPC1768 -flash-load-exec=путь_к_ELF_файлу_прошивки

flash-load-exec сразу же стартует выполнение прошивки, flash-load только загружает ее. Уже даже это неплохо — мы можем стирать и загружать прошивку без CodeRed. Но хочется все-таки отладки.

Поэтому после этого мы можем стартовать сам сервер:
C:\\nxp\\LPCXpresso_4.0.6_152\\lpcxpresso\\bin\\crt_emu_cm3_nxp.exe -g -4 -server=:3333

опция -4 задает максимальное количество отладочных сообщений, -server говорит о том, на каком порту мы будем ждать коннекта от gdb — в данном случае на localhost:3333.
Видим следующее обнадеживающее сообщение:

C:\\Users\\marvin>c:\\nxp\\LPCXpresso_4.0.6_152\\lpcxpresso\\bin\\crt_emu_cm3_nxp.exe -wire=hid -pLPC1768 -g -4 -server=:3333 -wire=hid -pLPC1768
Pc: (  0) Reading remote configuration
Ni: LPCXpresso Debug Driver v4.0 (Jul 22 2011 23:32:09)

Сервер занимает консоль намертво, поэтому дальнейшие действия производим в новой.

Стартуем GDB. Судя по всему, gdb здесь идет подхаченый NXP или CodeRed (т.к. как я сказал выше, с yagarto мне не удалось пока ничего добиться), но поскольку это GPL, то где-нибудь должны быть сорцы. Будем искать.
C:\\nxp\\LPCXpresso_4.0.6_152\\lpcxpresso\\Tools\\bin\\arm-none-eabi-gdb путь_к_ELF_файлу_прошивки


Видим приглашение GDB

Reading symbols from C:\\Users\\marvin\\Documents\\LPCXpresso_4.0.6_152\\workspace\\LPCX176x_cmsis2_systick_twinkle\\Debug\\LPCX176x_cmsis2_systick_twinkle.axf...done.
(gdb)

подключаемся к серверу
(gdb) target extended-remote :3333
(gdb) target extended-remote :3333
Remote debugging using :3333
_delay (del=16777216) at ../src/systick_twinkle.c:35
35              temp = i;
(gdb) print temp
$1 = 15280597
(gdb) print i
$2 = 15280598
(gdb) next
34          for(i=0;i<del;i++)
(gdb) print temp
$4 = 15280598
(gdb) print i
$5 = 15280598
(gdb)

Как видно, соединение с сервером установлено, и мы можем даже прочитать значение переменной и степать по коду. Работают брэйкпоинты
(gdb) list
29      }
30
31      void _delay(uint32_t del)
32      {
33          uint32_t i;
34          for(i=0;i<del;i++)
35              temp = i;
36      }
(gdb) break 23
Breakpoint 1 at 0x2c0: file ../src/systick_twinkle.c, line 23.
(gdb) cont
Continuing.
Note: automatically using hardware breakpoints for read-only addresses.

Breakpoint 1, main () at ../src/systick_twinkle.c:23
23              GPIO_SetValue(0, 1<<22);                // make P0.22 high
(gdb)

можно ходить внутрь функций
(gdb) step
GPIO_SetValue (portNum=0 '\000', bitValue=4194304)
    at ../src/lpc17xx_gpio.c:203
203             LPC_GPIO_TypeDef *pGPIO = GPIO_GetPointer(portNum);
(gdb) list
198      * - For all remaining bits that are not activated in bitValue (value '0
')
199      * will not be effected by this function.
200      **********************************************************************/

201     void GPIO_SetValue(uint8_t portNum, uint32_t bitValue)
202     {
203             LPC_GPIO_TypeDef *pGPIO = GPIO_GetPointer(portNum);
204
205             if (pGPIO != NULL) {
206                     pGPIO->FIOSET = bitValue;
207             }
(gdb)


Вобщем, топик большого практического смысла не несет, т.к. в консоли работать не сильно удобно, однако главную свою цель он выполняет — использовать отладку LPC-Link вне CodeRed IDE можно!

Включаем отладку в CoIde

Как мы уже выяснили ранее, для работы отладки нам нужен GDB-сервер и клиент. В случае с CoIde клиентом выступает сам Эклипс, а сервер нам надо запустить принудительно.
1. Идем в меню Debug->Debug Configuration. Выбираем Adapter — Other adapter (SWD).
2. Port number ставим произвольный, например 3333
3. GDBServer commandline — C:\nxp\LPCXpresso_4.0.6_152\lpcxpresso\bin\crt_emu_cm3_nxp.exe -wire=hid -pLPC1768 -server=:3333
4. В GDB init script пишем
target extended-remote :3333
set remotetimeout 60000
set mem inaccessible-by-default off
mon ondisconnect cont
set arm force-mode thumb
load «C:/Users/marvin/Dropbox/!Projects/LPC1768_LCD/Debug/bin/LPC1768_LCD.elf»
tb main
monitor reset 8 -1 -1
run
continue
5. Запускаем отладку, радуемся.

Если не работает, проверяем, загрузили ли мы прошивку в LPC-Link (см. первый пункт первой части)

Комментарии (14)

RSS свернуть / развернуть
Было бы прекрасно если бы удалось прикрутить отладку к CoIde. Тоже плата пока лежит без дела.
0
о! Не успел пост написать и моё желание исполнилось))
0
проверьте, если время есть, у меня вроде работает, но может еще что-то надо докрутить…
0
Кстати в CoIde 1.3.0 нет пункта
1. Идем в меню Debug->Debug Configuration. Выбираем Adapter — Other adapter (SWD).
0
странно, я был уверен, что у меня 1.3.
сейчас проверю
0
Не получилось запустить в версии 1.3.0
0
Кстати на платке установлен проц 1114.
0
ну пример, что я выше привел для 1768, но думаю что для 1114 должно аналогично делаться. с 1.3.0 щас проверю, как докачается
0
блин, действительно в 1.3.0 не работает. Напишу разработчикам кокоса
0
Я пытался добавить в адаптер j-link, т.к. он единственный где доступна строка GDBServer commandline tools. Попробуйте вы.
0
попробовал, не стартует. скорее всего там передаются еще какие-то лишние параметры
0
Не стоит без нужды засорять заголовок всякими апдейтами. Т.к. во первых меняется адрес, а во вторых через пару дней апдейт будет уже не актуален.
0
Кто нибудь запустил отладку в новой версии?
0
В новой версии работает без проблем=)
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.