轻松玩转树莓派Pico之四、Ubuntu下在线debug环境搭建

news2024/10/6 22:18:57

目录

1、openocd编译安装

1)安装依赖

2)下载

3)编译

4)安装GDB

2、Picoprobe编译与连接

1)下载、编译

 2)开发板连接

 3)Picoprobe连接至Linux

3、手工运行openocd和gdb

4、VSCode在线调试

1)插件安装

2)插件配置

3)Debug


按照前文轻松玩转树莓派Pico之一、新手上路一文中的Pico固件更新方式(uf2文件格式),在正式开发过程中需要不断修改代码/更新固件,这种固件更新方式会感觉开发效率有些低。Pico开发板芯片为RP2040,ARM-Cortex-M0架构,官方开发板上留有SWD接口,那是不是可以在线debug呢?答案是肯定的。

官方文档:https://datasheets.raspberrypi.com/pico/getting-started-with-pico.pdf 中有详细相关流程介绍。

官方文档中提供了2种在线debug方式:

方式1:树莓派作为主机,同时也作为openocd的仿真器,对Pico开发板进行固定烧录、在线debug。

方式2:使用1个专门的Pico开发板,作为Picoprobe,对另外一个目标Pico板进行debug

本文使用的是方式2,相关操作主机是在Ubuntu下进行。

另外,JLink也支持Pico在线调试,但对应的要求会相对更高。要求如下:

  1. J-Link software V7.64e or later
  2. J-Link HW revision 11 or later (J-Link EDU Mini and J-Trace PRO V1 or later also supported)
  3. SEGGER Embedded Studio for ARM V6.30 or later

对比后,JLink对应的硬件成本也比官方文档提供的方案高很多。

JLink操作Pico相关文档,可在Raspberry Pi Pico - SEGGER Wiki 页面查看。

本文所有操作流程均来源于getting-started-with-pico.pdf一文,只是将对应流程进行针对性的梳理。涉及到的章节有:

  1. Chapter 5. Flash Programming with SWD
  2. Chapter 6. Debugging with SWD
  3. Chapter 7. Using Visual Studio Code
  4. Appendix A: Using Picoprobe

1、openocd编译安装

1)安装依赖

sudo apt install automake autoconf build-essential texinfo libtool libftdi-dev libusb-1.0-0-dev

2)下载

​git clone https://github.com/raspberrypi/openocd.git --recursive --branch rp2040 --depth=1
​

3)编译

在命令行下,依次执行:

cd openocd
./bootstrap
./configure --enable-picoprobe
make -j4
sudo make install

安装完成后,在命令行下输入:

openocd -v

确定安装是否完成。安装成功则会显示如下:

​Open On-Chip Debugger 0.11.0-g4f2ae61-dirty (2022-11-09-22:06)
Licensed under GNU GPL v2
For bug reports, read
        OpenOCD: Bug Reporting

4)安装GDB

在命令行下输入:

sudo apt install gdb-multiarch

安装完成后,确认是否安装成功;在命令行中输入:

gdb-multiarch

正常安装会显示如下日志:

GNU gdb (Ubuntu 9.2-0ubuntu1~20.04.1) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.


For help, type "help".
Type "apropos word" to search for commands related to "word".
(gdb)

2、Picoprobe编译与连接

Picoprobe支持swd和uart,可以实现在线debug的同时实现串口日志输出、串口通讯等功能。Picoprobe也是通过Pico(RP2040)实现,相关内容可查看Appendix A: Using Picoprobe 一章。

1)下载、编译

​git clone --recursive https://github.com/raspberrypi/picoprobe.git
​cd picoprobe
mkdir build && cd build
cmake ..
make -j4

该仓库下有freertos和CMSID_5子模块,子模块未下载会编译出错。

编译完成后,会在build目录下生成picoprobe.uf2

按照前文轻松玩转树莓派Pico之一、新手上路一文中更新固件的方式,将picoprobe.uf2更新至作为Picoprobe的开发板中。

 2)开发板连接

按照如下方式连接:

PicoA作为Picoprobe,PicoB作为真实debug开发板

Pico A GND -> Pico B GND
Pico A GP2 -> Pico B SWCLK
Pico A GP3 -> Pico B SWDIO
Pico A GP4/UART1 TX -> Pico B GP1/UART0 RX
Pico A GP5/UART1 RX -> Pico B GP0/UART0 TX 

Pico A VSYS -> Pico B VSYS 

这样就可以直接用1个usb接口,同时使用swd和uart功能

 3)Picoprobe连接至Linux

由于我是通过vmware虚拟机+ubuntu的开发方式,USB设备默认连接到了Windows主机,需要手工按照“虚拟机”->“可移动设备”->“Picoprobe”->“连接”,将Picoprobe连接到Ubuntu下。

在ubuntu下可通过通过dmesg | grep usb命令查看是否加载成功。 

 注:每次加载成功后,需要设置一下usb权限;在命令行下输入:

sudo chmod -R 777 /dev/bus/usb/

否则在运行中会出现如下错误:

Error: libusb_open() failed with LIBUSB_ERROR_ACCESS
Error: Failed to open or find the device
Error: Can't find a picoprobe device! Please check device connections and permissions.

3、手工运行openocd和gdb

openocd不仅可以用来在线debug,同时也可以用来烧录固件。

1)烧录固件

在命令行下输入:

cd pico-examples/build/hello_world/serial
openocd -f interface/picoprobe.cfg -f target/rp2040.cfg -c "program hello_serial.elf verify reset exit"

即可进行固件烧录

2)在线debug

在命令行下输入:

openocd -f interface/picoprobe.cfg -f target/rp2040.cfg -s tcl

正常启动openocd,显示日志如下:

Open On-Chip Debugger 0.11.0-g228ede4-dirty (2022-11-23-18:24)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'swd'
adapter speed: 5000 kHz


Info : Hardware thread awareness created
Info : Hardware thread awareness created
Info : RP2040 Flash Bank Command
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : clock speed 5000 kHz
Info : SWD DPIDR 0x0bc12477
Info : SWD DLPIDR 0x00000001
Info : SWD DPIDR 0x0bc12477
Info : SWD DLPIDR 0x10000001
Info : rp2040.core0: hardware has 4 breakpoints, 2 watchpoints
Info : rp2040.core1: hardware has 4 breakpoints, 2 watchpoints
Info : starting gdb server for rp2040.core0 on 3333
Info : Listening on port 3333 for gdb connections
  • 同时在另一命令终端中输入:
cd pico-examples/build/hello_world/serial
gdb-multiarch hello_serial.elf

在正常显示(gdb) :后输入:

target remote localhost:3333

然后就可以输入b main等gdb指令,即可进行手工debug。

4、VSCode在线调试

使用手工运行openocd和gdb,对gdb熟悉度要求很高,我们可以借助VSCode相关功能进行可视化在线调试,无须再次手工输入一堆命令。

相关内容可以查看Chapter 7. Using Visual Studio Code一章。

1)插件安装

  • C/C++:用于C/C++语法支持,跳转,运行和调试功能
  • CMake:用于Cmake语法支持
  • Cmake Tools:让VSCode提供各种CMake编译相关的小工具,包括在底部状态栏显示一些快捷工具
  • Cortex-Debug:用来debug ARM cortex-M系列单片机

2)插件配置

VSCode运行和调试功能依赖C/C++插件和工程目录下的.vscode目录下相关.json文件配置。pico-examples工程提供了对应的配置文件。

在命令行下输入:

cd pico-examples
mkdir .vscode
cp ide/vscode/launch-raspberrypi-swd.json .vscode/launch.json
cp ide/vscode/settings.json .vscode/settings.json

由于我用的是Picoprobe,默认的lauch.json使用的是raspberrypi-swd模式,完成以上操作后,我们需要修改一下launch.json,将

 "configFiles": [

                "interface/raspberrypi-swd.cfg",

                "target/rp2040.cfg"

            ],

修改为:

 "configFiles": [

                "interface/picoprobe.cfg",

                "target/rp2040.cfg"

            ],

"configFiles"配置项为Cortex-Debug插件对应的相关配置文件。

3)Debug

点击VSCode的“运行和调试功能”按钮,点击“debug”按钮,VSCode会将当前目录下多个可执行人文件全部列出,让我们选择需要运行的目标文件。

  • 选择对应elf文件

  • 在线运行

VSCode会对当前工程下修改的文件做一次编译,编译没有错误后,调用openocd将选择后的elf下载至pico开发板,然后调用gdb,并跳转到main函数。

 点击右上角调试按钮,即可运行对应功能,分别对应“全速运行”、“运行至断点”、“单步调试”等功能。

  • debug过程中的相关信息查看

可通过“变量”、“监视”、“调用堆栈”、“断点”功能,查看代码运行过程中的相关值。

同时也可以通过Cortex-Debug插件对应的rp2040.svd文件提供的相关信息,查看“CORTEX PERIPHERALS”、“CORTEX REGISTERS”、“PERIPHERALS”等功能实时查看RP2040在运行过程中的状态,用于快速定位问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/30375.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Niantic CEO:AR有望取代二维码,理想的AR眼镜还需3-5年

早前&#xff0c;Niantic CEO John Hanke就曾谈到过对于元宇宙的愿景&#xff0c;相比于VR的沉浸式体验&#xff0c;他认为未来元宇宙应该是将虚拟和现实融合的AR体验。尽管如此&#xff0c;现在还没有一款足够普及的AR眼镜产品&#xff0c;仅依赖手机、平板电脑并不能展现沉浸…

《Linux-常见指令详解》

目录 Linux背景 开源 操作系统的理解 问题 1.空文件占磁盘空间吗&#xff1f; 2.创建的文件是在内存中还是磁盘中&#xff1f; 3.绝对路径和相对路径的区别 4.Linux下的文件后缀可以随便写&#xff0c;不同于Windows 常见指令和权限 查看 Linux 主机 ip 使用 XSh…

Alibaba 官方上线,SpringBoot+SpringCloud 全彩指南(第五版)

Alibaba 作为国内一线互联网大厂&#xff0c;其中 springcloudAlibaba 更是阿里微服务最具代表性的技术之一&#xff0c;很多人只知道 springcloudAlibaba 其实面向微服务技术基本上都有的下面就给大家推荐一份 Alibaba 官网最新版&#xff1a;SpringBootSpringCloud 微服务全栈…

面试系列分布式事务:谈谈2PC的理解

2PC其实就是两阶段提交的分布式事务中事务类型&#xff0c;两阶段提交就是分两个阶段提交&#xff1a; 第一阶段询问各个事务数据源是否准备好。 第二阶段才真正将数据提交给事务数据源。 为了保证该事务可以满足ACID&#xff0c;就引入一个协调者&#xff08;Cooradinator&…

【OpenCV-Python】教程:3-9 轮廓(2)轮廓特征

OpenCV Python 轮廓特征 【目标】 轮廓矩轮廓周长、轮廓面积轮廓拟合、轮廓凸包、轮廓凹凸性检查外接矩形、最小包围圈椭圆拟合、直线拟合 【代码】 周长、面积、矩 第一幅图像为原始轮廓图像&#xff0c;第二幅图像为轮廓点拟合图像&#xff08;精度为周长的1/10&#xff…

Docker——Windows版本Docker安装

目录 一、简介 1.1 Docker如何解决大型项目依赖关系复杂&#xff0c;不同组件依赖的兼容性问题&#xff1f; 1.2 Docker如何解决开发、测试、生产环境有差异的问题 1.3 Docker 和 虚拟机的区别 1.4 Docker架构 1.5 总结 二、Docker安装&#xff08;Windows版&#xff09; 2.1…

电容笔可以用什么代替?好用电容笔品牌推荐

在互联网办公、互联网教学等领域&#xff0c;电容笔再次成为全球流行的电子产品。用平替电容笔来代替苹果的电容笔吗&#xff1f;实际上&#xff0c;我们可以考虑买一支平替电容笔&#xff0c;而不用再买昂贵的苹果 Pencil。一支平替电容笔&#xff0c;一两百块钱&#xff0c;比…

spring web 简单项目数据库查询 纯注解版替代web.xml

关键词句&#xff1a;第一个spring 简单项目 纯注解 包括替代web.xml 文件 第一个spring mvc web 简单项目 纯注解 用纯注解写spring web 简单项目 纯注解写web 项目 spring 写数据库 查询 注解方式 spring 数据接链接池 用的阿里的 spring jdbc jdbcTemplate类使用…

python--星际大战(基础版)

实现功能&#xff1a; 运用python的pygame模块实现上方出现一群体的敌机&#xff0c;每个敌机会随机不定时发射子弹&#xff0c;下方是玩家飞机&#xff0c;通过控制方向和发射子弹来摧毁所以敌机&#xff0c;在游戏开始前会有一个计时器&#xff08;3秒&#xff09;计时结束&…

3、Pinpoint-Agent端注册服务到Server端

0、此节简介 此章节大部分操作是在另一台服务器上&#xff0c;vm7。 Agent端配置 项目发布 注册到Pinpoint服务端 接口调用&#xff0c;服务端查看详情 1、Agent端配置 Agent推荐使用和Pinpoint服务端同样的版本。 1.1、下载Pinpoint-Java-Agent包 Github下载链接&#xff1a;h…

第七章 规范化:Eslint + Prettier + Husky

第七章 规范化&#xff1a;Eslint Prettier Husky 为了项目能够长期健康的发展。代码的规范性建设非常重要。只有纪律严明的队伍才能不断打胜仗。 规范制定容易&#xff0c;执行的难度很大。 项目规范可以分为&#xff1a; 编码规范&#xff1b;项目结构规范&#xff1b;…

hyper-v虚拟机ubuntu ssh配置

环境描述&#xff1a; 本地机&#xff1a;win10系统 linux机&#xff1a;hyper-v 虚拟机中的ubuntu 1、ssh 安装和启用 //安装ssh sudo apt-get install ssh//启用ssh service ssh start//查看ssh状态 service ssh status 2、网络工具安装和ip查看 //安装网络工具 sudo ap…

[附源码]SSM计算机毕业设计基于篮球云网站JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

$.ajax异步请求总结

$.ajax()简单介绍 AJAX 是一种与服务器交换数据的技术&#xff0c;可以在不重新载入整个页面的情况下更新网页的一部分 $.ajax()是万能的&#xff0c;是最基础&#xff0c;最全面的那个&#xff1b;剩余的方法都是针对某种特定场景下的$.ajax()的简化形式 $.ajax()、$.post()…

Java环境变量学习

0. 找到你的安装路径 C:\Program Files\Java 这种语言的开发工具&#xff0c;重要的东西建议就安装在C盘 0.1 里面有什么&#xff1f; 其实就是很多java命令而已 用来编译的&#xff0c;运行的 JDK开发用的JRE运行用的 就像python中给你开发工具的同时&#xff0c;再给你一个…

[附源码]java毕业设计学习资源共享与在线学习系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Jetpack Compose中的state核心思想

Compose 中的状态 应用的“状态”是指可以随时间变化的任何值。这是一个非常宽泛的定义&#xff0c;从 Room 数据库到类的变量&#xff0c;全部涵盖在内。 所有 Android 应用都会向用户显示状态。下面是 Android 应用中的一些状态示例&#xff1a; 聊天应用中最新收到的消息…

Unity3D : 本地坐标系,世界坐标系,和TransformPoint,TransformVector,TransformDirection的区别

目录 一、世界坐标系与本地坐标系 二、srcGameObject.transform.TransformPoint(Vector3 vec) 三、srcGameObject.transform.TransformVector(Vector3 vec) 四、srcGameObject.transform.TransformDirection(Vector3 vec) 五:示例 一、世界坐标系与本地坐标系 世界坐标很…

[LabVIEW]圖像內的物件計算_Count objects

NI雖然是以賣硬件為主的公司&#xff0c;但其在軟件(LabVIEW)的著墨也相當深厚&#xff0c;尤其是各類應用模組的更新速度和對應功能。 每每不經意地碰觸到新版本的LabVIEW&#xff0c;都會不由自主地翻閱和嘗試新增模組。 本文藉由兩個模組串接簡易製作一支圖像計數程式&…

七、模型评估指标

当训练好模型之后&#xff0c;检测模型训练效果如何&#xff0c;评价指标有哪些&#xff1f;通过查阅相关资料&#xff0c;我将以这五个指标来对所训练的模型进行评估&#xff0c;下图是评价指标运行结果图。 一、混淆矩阵&#xff08;Confusion Matrix&#xff09; 解释&…