MounRiver® Studio(MRS) 配合 GD-Link 、 WCH-Link 、 JLink 等在线调试下载器,可支持 GDVFx 系列、 CH56x 、 CH57x 、 CH58x 、 CH32Fx 、 CH32Vx 等 RISC-V/ARM 内核 MCU 工程的代码调试功能。本文主要介绍 MRS 针对 RISC-V 内核 MCU 的代码调试操作。 【启动调试】以 CH32V103C8T6 的芯片工程为例来说,首先保证工程可以编译通过,然后点击菜单栏 按钮,开始进入调试模式,正常进入调试模式会停在如图所示的位置,此位置有一个临时断点: 【更改默认断点位置】当然如果希望工程可以直接停在 main 函数起始地方,也可以去手动更改此断点的位置,点击 调试图标旁 的下拉按钮,选择 ”Debug Configurations” ,在弹出的页面中选择 Startup 选项卡,将 set breakpoint at 设置为 main 即可。 配置完成后点击右下角 Debug ,或者保存之后退出配置,点击菜单栏 ,进入调试模式后就会停在刚才设置的位置 【查看机器码】进入调试之后,可以看到左下角 Disassembly 窗口,此窗口可以显示 PC 附近代码的汇编以及地址,也可以在左侧空白处鼠标右键,选择 show opcodes, 来显示机器码。 【机器码断点与跳转】双击反汇编窗口左侧空白处也可以设置断点,红框位置处可以填写 16 进制的地址,用来跳转到想要查看位置的汇编代码。主窗口用来显示代码运行位置,可以在左侧窗体位置处双击来增加或取消断点。 【软件断点】因为采用的是软件断点,理论上不限制断点个数,但是过多的断点会引起程序仿真变慢。 【变量查看】右侧 Variables 窗口会显示当前函数中变量的值。也可以在此窗口修改你想要改变的变量的值,但注意只是修改到 Ram ,重新上电后该值恢复为实际大小。 【添加监测变量】 Experssions 可以自定义添加监测的变量,也同样可以修改,效果和 Variables 窗口中的一致。 【错误中断】下方 Registers 窗口显示的是 RISCV 内核的 CSR+GPR 寄存器,可以用来观测内核状态,有几个寄存器在出现 HARDFAULT 错误时可以帮助定位问题,在进入硬件错误中断处理函数时, mepc 显示的是出错时的地址, mcause 显示的是原因, mtval 显示的是出错时 cpu 取到的值, mcause 值含义如下图。 【断点窗口】 Breakpoints 窗口可以显示所有设置的断点位置,可以在此处使能或者删除段断点。 【内存窗口】 Memory 窗口可以用来查询不同地址的值,例如我们查询 0x2000000 ,点击该窗口下绿色加号 ,在弹出的窗口输入要查询的地址。此处也可更改不同地址内的数据,要注意的是根据芯片手册看此地址是否可以读写。 【外设寄存器窗口】 Peripherals 窗口可以选择要观察的外设寄存器,一同展示的内容除外设寄存器名称外,还有地址以及描述信息。