Отладка кода для Raspberry Pi Pico RP2040 в Eclipse
В предыдущей статье мы рассмотрели настройку среды разработки Eclipse для работы с RP2040 в Windows и собрали минимальный проект мигания светодиодом. Сегодня я бы хотел рассказать об одном способе отладки программы. Как уже ранее говорилось, известны следующие инструменты отладки:
- J-Link - только новые версии отладчиков, китайские клоны не работают;
- Black Magic Probe - работает нестабильно;
- Picoprobe - необходима еще одна плата Pico;
- pico-debug - для отладки используется второе ядро контроллера, дополнительное оборудование не нужно. Этот вариант мы и рассмотрим.
Pico-debug работает на втором ядрес Arm Cortex-M0+ и превращает плату Raspberry Pi Pico в USB-устройство, реализующее интерфейс CMSIS-DAP, и используется для отладки программы, исполняющейся на первом ядре.
Есть две версии программы pico-debug:
- MAXRAM - данная версия позволяет использовать всю доступную SRAM размером 264 КБ. Код программы загружается и исполняется в XIP_SRAM - кэш флеш-памяти, объёмом 16КБ;
- GIMMECACHE- версия отладчика, которая загружается и исполняется в SRAM, предоставляя около 94% свободной памяти для пользовательской программы и оставляя работоспособной XIP_SRAM. Данная версия наиболее предпочтительна для использования;
Обе версии программы имеются уже в скомпилированном виде и доступны для скачивания по ссылке.
Очевидно, что такой способо отладки имеет ограничения:
- Пользовательское приложение не может использовать USB-интерфейс, потому как он занят под отладку;
- При использовании версии MAXRAM недоступен кэш флеш-памяти XIP_SRAM;
- При использовании версии GIMMECACHE недоступна область памяти SRAM с адреса 0x2003C000 по 0x2003FFFF;
- Нельзя перенастраивать PLL_USB, т.к. как отладчик перестанет функционировать;
- Пользовательская программа может исполняться только на ядре 1;
Качаем прошивку GIMMECACHE и прошиваем ею плату Pico:
- Переведите Raspberry Pi Pico в режим Mass Storage Device, для чего зажав кнопку Boot подключите плату к USB
- Скопируйте файл pico-debug-gimmecache.uf2 на виртуальный накопитель, после чего он будет отключен и программа pico-debug начнет исполняться
В прошлый раз мы скачали программу отладки OpenOCD и поместили ее в каталог c:\pico\OpenOCD-20211118-0.11.0. Запускаем GDB-сервер командой:
c:\pico\OpenOCD-20211118-0.11.0\bin\openocd.exe -f board/pico-debug.cfg
Далее запускаем Eclipse и открываем созданный нами в прошлый раз проект RP2040Minimal. Затем переходим к настройке отладочного профиля Run->Debug Configurations... Мы будем создавать профиль на основе шаблона конфигурации GDB OpenOCD Debugging.
На вкладке Debugger отключаем запуск OpenOCD. Также нужно указать полный путь к arm-none-eabi-gdb.exe. Сделаем это с помощью созданной ранее переменной ${PICO_TOOLCHAIN_PATH}. Остальные настройки оставляем по умолчанию. Конечно, было бы удобнее, чтобы GDB-сервер запускался автоматически каждый раз, когда нужно запустить отладку. Но из-за некорректного завершения процесса отладки повторный запуск GDB-сервера невозможен, приходится перепрошивать плату Pico. Потому GDB-сервер будем запускать вручную. Если знаете как решить эту проблему, напишить в комментариях.
На вкладке Startup настройки можно не менять:
И последнее что нужно сделать - указать на вкладке SVD Path путь к файлу описания регистров. Укажем его, использую переменную ${SDK_PATH}:
После этого настройку профиля отладки можно считать законченной. Запускаем отладку нажав кнопку Debug.
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Комментарии
>>Потому GDB-сервер будем
>>Потому GDB-сервер будем запускать вручную.
>>Если знаете как решить эту проблему, напишить в комментариях.
Попробовать убрать галку в Pre-run/Restart reset, и поставить галку Debug on RaM