专栏首页裸机思维MDK震惊!树莓派Pico的调试还能“单体自助”的?

MDK震惊!树莓派Pico的调试还能“单体自助”的?

【说在前面的话】


家人们,扎心了啊!自从上次通过文章《【独家】我就要用MDK来开发树莓Pico,怎么地吧!》发布了使用MDK编译和开发Pico应用的模板以来,虽然Github仓库里的clone总数是蹭蹭的网上窜,但顺手Star一下的小伙伴却没几个……

这里,我一定要谢谢那几个不远万里过来给我Star的兄弟:

谢谢啦。

对于还没有star的小伙伴,我理解你们也许是忘记了,也许是不方便,总之呢,我把项目连接放这里了,你们看着办……

https://github.com/GorgonMeducer/Pico_Template

我能怎么办?

给你们跪下了,求求家人们给个Star吧……

你们的支持是不会白费的。这不,之前有小伙伴反馈说Seggar官方虽然通过J-Link对Pico的调试提供了支持,实际支持调试的J-Link hw revision 11据说贵得离谱,问我有没有更便宜的调试方式……

为了获得MDK环境下“编译、下载、调试”一条龙服务的完整体验,我这几天一直通过各种渠道在网上转悠,头都要秃了……终于,功夫不负有心人,找到了一个让远超我想象的方案。

我们都知道Pico所使用的RP2040实际上是一个双核Cortex-M0+,一般情况下,我们都只会使用其中一个核,而另外一个核就处于啥事不干的休眠状态。所以呢,网上就有兄弟琢磨着把其中一个Cortex-M0+拿来做调试器。于是就有了Github上的这个开源项目 Pico-debug。

https://github.com/majbthrd/pico-debug

这方案有多离谱呢?我给你比划比划:

  • 它不需要额外的硬件:一根USB线,加你手上已有的Pico就行;
  • 它不需要额外的上位机软件,只要一个额外提供的 uf2 文件就行;
  • 它直接把其中一个Cortex-M0+变成了 CMSIS-DAP 调试器,而且是无需用户额外连SWD线——直接就在内部对另外一个Cortex-M0+进行调试。
  • 它不占用Flash,只占用 0x2003C000 ~ 0x2003FFFF 区间的 16K RAM。考虑到Pico总共有264KB的SRAM,这种安排实际上保留了绝大部分的SRAM(248KB)给用户使用。

对大部分人来说,双核的Pico实际上永远只是一个单核M0+而已,这种把另外一个核当做调试器的做法简直是“变废为宝”、“点石成精”啊。

话说,自带调试器的开发板很常见,但通过pico-debug项目树莓派Pico一跃成为世界上第一个自带调试器的Cortex-M0+单片机

—— “我调试我自己” 可还行?!

【如何实现调试的“单体自助”】


要想让你手中的Pico变成自带调试器的单片机,你需要访问下面的网址:

https://github.com/majbthrd/pico-debug/releases

下载这里的 pico-debug-gimmecache.uf2 文件(不要下错了哦),留着备用。

此外,我已经对Pico-Template进行了更新,发布了v1.1.x 版本——对用户来说,MDK工程模板已经为您配置好了一切。新版本的获取方式请参考往期文章《【独家】我就要用MDK来开发树莓Pico,怎么地吧!》或者,在订阅【裸机思维】公众号后,发送关键字“pico”来获取网盘链接。(有机会的话,还是跪求一个Star,谢谢啦)。

【如何享受调试的最佳姿势】


对大部分人来说,Pico-Template所提供的 AC6-DebugInSRAM 实现了“编译、下载、调试”一条龙服务。

由于pico-debug所实现的CMSIS-DAP调试器运行在SRAM中,因此很容易注意到每次对Pico进行断电后,都需要重新进行一次如下步骤:

1、按住Pico上的白色按钮不放、将Pico的USB接口连接PC。当我们在文件管理器中发现一个新的叫做 PRI-RP2 的U盘时,说明Pico已经成功进入烧录准备状态。

2、将pico-debug-gimmecache.uf2 拖放到U盘中即可。

3、如果一切顺利,我们可以在资源管理器中发现一个新的HID-compiliant设备。

这里,还请放宽心,这个步骤每次断电后的第一次连接都只要做一次就行——不必每次启动调试都做一遍

打开MDK,切换到 DebugInSRAM 工程配置。在Options for Target窗口中,我们可以从Debug选项卡里看到:调试器已经被选择为 CMSIS-DAP Debugger。

单击 Settings,我们应该看到 Pico 的其中一个 Cortex-M0+已经被检测到了:

注意:由于MDK工程模板中所有三个工程configuration(也就是RunInFlash、RunInSRAM和DebugInSRAM)都使用了同一个Objects文件夹来保存生成的 axf 文件,为了避免误会,在开始RunInSRAM环境下的调试之前,一定要对当前工程进行至少一次重新编译——以确保载入的template.axf是对应当前工程配置的。

对工程进行编译后,单击调试按钮,我们应该看到指针停在了Reset_Handler程序上:

【一些已知的问题】


  • main()断点问题:

由于未知的原因,仅仅在 DebugInSRAM 配置下,无论我们选择何种优化等级,总之就是无法让调试过程停在main() 函数的入口处(你可以下断点,但实际全速跑以后是会遇到错误提示):

Warning: BKPT instruction at 0x2000A724 externally modified! May have missed required breakpoint.

这算是一个小遗憾,但有趣的是,除此以外的地方,都可以在“第一次全速运行后的暂停期间正确设置,并有效的让代码停止下来”…… 这也算是“未解之谜”了……

  • 复位失效问题:

另外一个问题是:由于DebugInSRAM实现原理上的特殊之处——它实际上是利用了RP2040留下的所谓工厂模式,绕过了stage2 boot,而直接跳到用户指定的地方开始执行——因此任何形式的RESET其实都会导致芯片退出这个工厂模式,这就意味着DebugInSRAM失效了。

换句话说,如果你想RESET,有一简一繁两种方式:

【繁琐方案】:

1、先找到Debug的Command命令行窗口

2、输入 debug_in_ram()

回车后,你将看到窗口中打印出了程序的入口地址和主栈顶指针:

这表明我们已经成功的为RESET做好了准备。

3、在命令行中输入"RESET"后回车。

4、在命令行中输入"G, Reset_Handler" 后回车。

此时,我们就完成了整个复位过程。

【简单方案】:直接关闭调试,重新再开即可。

两个方案“孰优孰劣”,我想你“一试便知”。

【如何对RunInFlash和RunInSRAM进行调试】


除了前面所说的 DebugInSRAM 方案外,Pico-Template模板还提供了一般工程开发所需的 RunInFlash 和 RunInSRAM 两个配置。

它们的调试本身并不复杂,甚至没有前面提到的 DebugInSRAM 中的两个问题:“main() 断点问题”和“复位失效问题”

但这两个配置有自己的难言之隐,即:每次重新编译工程后,都需要用户:

  • 首先,通过常规方法将 uf2 文件拖放到 RPI-RP2 盘中完成“手工下载”;
  • 紧接着,还要再次Boot Pico使其进入U盘模式后拖放 pico-debug-gimmecache.uf2 使Pico具有调试能力
  • 最后才是通过MDK进入调试模式。

总结一下:RunInFlash和RunInSRAM的调试优点是非常方便、没有弯弯绕;缺点是下载纯手工。

【说在后面的话】


开源项目的魅力是:你永远不知道在什么地方可以遇到惊喜,比如 pico-debug 这个项目的存在——它把Pico其中一个Cortex-M0+变成 CMSIS-DAP的操作实在是“太骚气了”。

开源项目的好处是:有众多用户支持的项目,通常是用户的反馈越多,其演进的可能性也越大——你永远可以通过自己的支持和反馈来推动它不停的改进

开源项目的烦恼是:都是免费的,要啥自行车……如果你遇到孜孜不倦维护开源项目的博主,还请珍惜吧——就算是雷锋,薅秃一个也少一个……

最后的最后,我想回答一个上期文章评论区的一种言论态度:一些小伙伴看到有人用MDK来玩Pico,仿佛就觉得我在说“cmake”不是好东西,仿佛我说了“只有用MDK开发才是对的”——如果我没说清楚,这里我就再说一次:

  • cmake很香,我没说用cmake不好
  • cmake再好,不代表所有人都应该会觉得它好
  • 你、我觉得cmake好,不代表所有人都应该跟我们一样觉得cmake好;我们也不应该对不用cmake的人嗤之以鼻——我们配么?!
  • 我提供Pico-Template让大家可以用MDK来开发Pico,只是提供了一个额外的可能性——多了一个选项。这就好比菜单上,一个鸭子多了一吃——选择权始终在用户手里,没有强迫你去用这种方法,也没有因为多了一个选项就意味着这个选项更好而其它的更差
  • 如果你在认真看完这些内容后,不同意以上观点,请取关【裸机思维】,谢谢。

本文分享自微信公众号 - 裸机思维(bare-metal),作者:GorgonMeducer 傻孩子

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-09-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【独家】我就要用MDK来开发树莓Pico,怎么地吧!

    树莓派 Pico是一个小巧、“迅速”且多功能的开发板,基于独家定制的RP2040芯片打造,是在英国的树莓派团队设计的全新微控制器。

    GorgonMeducer 傻孩子
  • 【更新】Pico-Template 稳定调试版v1.3.2发布

    首先必须要感谢小伙伴们的踊跃“star”——这给了我莫大的支持和动力,于是Pico-Template又更新了!本文发出时的版本是 v1.3.2,主要带来以下的更...

    GorgonMeducer 傻孩子
  • 7月Top10树莓派改装项目:跨界改装无人机、GPS接收器、Game Boy

    树莓派(Raspberry Pi)由英国树莓派基金会开发,希望通过低价硬件和免费软件来促进学校的基本计算机科学教育。

    新智元
  • 龙芯派VS树莓派 运行功耗实测

    龙芯派、树莓派都是开源硬件,并且都是定位在单板计算机的领域,外设上基本上也差不多。正好手上有这些板子,所以来测试一下手上这些板子的功耗情况。龙芯教育派、树莓派4...

    bigmagic
  • 远程控制树莓派3b上的pi pico

    树莓派pi pico和树莓派4相比差别很大,但是pi pico有一些特点是树莓派4上没有的,比如实时性控制上,采用cortex-m系列方案会更加占据优势,所以往...

    bigmagic
  • 懒人玩Arm-2D究竟有几种姿势

    如果你是第一次接触Arm-2D,可以单击这篇文章《为什么说Arm-2D是小资源单片机的GUI人权卡!》来了解大概、或是观看公开课(https://aijishu...

    GorgonMeducer 傻孩子
  • 首款微控制器级树莓派 Pico,超廉价只需4美元

    2021年1月21日,树莓派基金会发布了首款微控制器级产品:Raspberry Pi Pico。

    不脱发的程序猿
  • 用树莓派的方式打开《Bad Apple!!》原来是这样子的

    不光是因为效果惊艳、音乐洗脑,更因为有很多方式都可以实现《Bad Apple!!》。

    量子位
  • 难道没人想用Jetson NANO来试试这个?

    今天Lady看到一个视频,有一个Oracle开发者团队构建了一个庞大的树莓派集群。

    GPUS Lady
  • 硬核博主魔改32年前GameBoy,可远程联机玩俄罗斯方块,还能挖比特币!

    黑白点阵液晶屏幕,游戏卡带支持更换,GameBoy作为任天堂第一款便携式游戏机,销量达到1.2亿台,可以说是风靡世界。

    大数据文摘
  • 树莓派4发布!CPU提升3倍,性能堪比主流PC,AI能力大增,顶配售价55美元

    “这太疯狂了!USB 3.0!千兆以太网!WiFi 802.11ac,蓝牙5.0,4GB内存!4K60帧显示!最贵才55美元?!”

    量子位
  • 如何用100美元和TensorFlow来造一个能“看”东西的机器人

    物体识别是现在机器学习领域的热点之一。相当长的时间里,计算机已经能相当可靠地识别人脸或者猫。但在更大的图片中去识别一个指定的物体还是人工智能领域的“圣杯”。人类...

    用户1908973
  • 极客DIY:制作一款智能家用温控器(PART 2)

    引文 在上一部分,我主要是对于外壳以及如何利用树莓派完成了一些简单的计划任务,下面将会对其余的计划任务进行制作。 写在前面 这里主要是需要了解作者用到了两个部分...

    FB客服
  • 【树莓派自动化应用实例】整点提醒自己休息五分钟

    背景介绍 ? 我有一个习惯,定闹钟每隔60分钟左右,提醒自己休息一次。我发现自己有时候长时间思考,很容易拘泥于细节之中。适当的简单休息过后,往往会对正在解决和处...

    ios122
  • 用树莓派学习Linux及Python真的高效吗?

    作者 | 地球的外星人君 知乎https://www.zhihu.com/question/54825393 建议放弃这个想法。 工具只是工具,学习靠的是人。...

    前端教程
  • 基于树莓派和Tensowflow的物体识别-brain

    近来这篇文章很火:How to build a robot that “sees” with $100 and TensorFlow (作者是Lukas,Cro...

    刘盼
  • 树莓派使用Android系统

    这篇文章详细记录了下怎么在树莓派上安装安卓系统,使用了LineageOS版本的Android。

    用户6968133
  • Raspberry Pi Pico是个啥(云体验)+云点灯

    首先,这个芯片不知道有没有卖的。如果有就可以自己打板,diy。因为齐全用了ARM的处理器,不知道一些高级特性是不是支持。

    云深无际
  • 树莓派4 rt-thread实现SPI屏人机交互界面

    树莓派4的rt-thread一直在不断的更新,充分挖掘可以树莓派底层硬件的特性,同时借助各种外设,使得树莓派4成为一个更加适合学习嵌入式开发,验证各种外设功能,...

    bigmagic

扫码关注云+社区

领取腾讯云代金券