【说在前面的话】
首先必须要感谢小伙伴们的踊跃“star”——这给了我莫大的支持和动力,于是Pico-Template又更新了!本文发出时的版本是 v1.3.2,主要带来以下的更新:
- 解决了 AC6-DebugInSRAM 无法生成 uf2 的问题。现在编译后会正确生成一个 template.uf2。托放到PICO的U盘后会正确执行——完全在SRAM中执行,不会更新Flash哦;
- 解决了 AC6-DebugInSRAM 中无法简单方便的 Reset 的问题——引入了一个专门的按钮 “Reset Pico”
- 解决了 AC6-DebugInSRAM 无法在 main() 函数设置断点的问题。
- 提高了模板的代码鲁棒性。
感兴趣的小伙伴赶快更新吧!此外,顺便更新下教程(由于问题都解决了,教程反而变简单了)。
【如何实现调试的“单体自助”】
要想让你手中的Pico变成自带调试器的单片机,你需要访问下面的网址:
https://github.com/majbthrd/pico-debug/releases
下载这里的 pico-debug-gimmecache.uf2文件(不要下错了哦),留着备用。
此外,我已经对Pico-Template进行了更新,发布了v1.3.2 版本——对用户来说,MDK工程模板已经为您配置好了一切。新版本的获取方式请参考往期文章《【独家】我就要用MDK来开发树莓Pico,怎么地吧!》
【如何享受调试的最佳姿势】
对大部分人来说,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,切换到 AC6-DebugInSRAM工程配置。在Options for Target窗口中,我们可以从Debug选项卡里看到:调试器已经被选择为 CMSIS-DAP Debugger。
单击 Settings,我们应该看到 Pico 的其中一个 Cortex-M0+已经被检测到了:
注意:由于MDK工程模板中所有三个工程configuration(也就是AC6-flash、AC6-RunInSRAM和AC6-DebugInSRAM)都使用了同一个Objects文件夹来保存生成的 axf 文件,为了避免误会,在开始AC6-DebugInSRAM环境下的调试之前,一定要对当前工程进行至少一次重新编译——以确保载入的template.axf是对应当前工程配置的。
对工程进行编译后,单击调试按钮,我们应该看到指针停在了Reset_Handler程序上:
【如何对RunInFlash和RunInSRAM进行调试】
除了前面所说的 AC6-DebugInSRAM方案外,Pico-Template模板还提供了一般工程开发所需的AC6-Flash和AC6-RunInSRAM两个配置。
它们的调试本身并不复杂,但这两个配置有自己的难言之隐,即:每次重新编译工程后,都需要用户:
- 首先,通过常规方法将 uf2 文件拖放到 RPI-RP2 盘中完成“手工下载”;
- 紧接着,还要再次Boot Pico使其进入U盘模式后拖放pico-debug-gimmecache.uf2使Pico具有调试能力
- 最后才是通过MDK进入调试模式。
总结一下:AC6-Flash和AC6-RunInSRAM的调试优点是非常方便、没有弯弯绕;缺点是下载纯手工。
【复位Pico的正确姿势】
由于树莓派Pico的特殊性,目前MDK中的普通的复位按钮其实并不足以正确对芯片进行复位。为此,Pico-Template提供了专门的方法——一个由脚本生成的按钮“Reset Pico”:
如果你的调试界面中找不到它,不要紧,在启动调试后,顺着菜单依次找到“View->Toolbox Window”,点开即可。
首发:裸机思维
作者: GorgonMeducer 傻孩子
专栏推荐文章
如果你喜欢我的思维,欢迎订阅裸机思维
版权归裸机思维(傻孩子图书工作室旗下公众号)所有,
所有内容原创,严禁任何形式的转载。