考虑到习惯命令行操作的用户群体,MounRiver® Studio(MRS)除了使用图形化UI进行用户交互外,也提供了脱离界面的命令行操作说明,用于对编译后的工程进行烧录和调试。如果是Linux平台用户,您也可以在MRS官网的下载页面下载工具链和OpenOCD压缩包,根据说明引导进行实践。本文以Windows平台软件环境MRS1.51进行介绍。
【命令行入口】MRS提供了已包含工具路径的命令行。点击工具栏图标,或者在Project Explorer右键弹出菜单中选择Open MRS Console,即可打开命令行,并自动指定将当前路径为对应的目录路径(如果选择的是文件,则当前路径为文件所在的目录)。若当前未选择资源,命令行的当前路径即为工作空间目录。
【编译】
由于脱离了界面的UI配置,对于未知的工程结构。用户需要:
【烧写,以wch的risc-v内核工程为例】
擦除 OPENOCD_PATH –f CFG_PATH –c init –c halt -c "flash erase_sector wch-riscv 0 last" –c exit
编程 OPENOCD_PATH –f CFG_PATH –c init –c halt -c "program TARGET_PATH ADDRESS" –c exit
校验 OPENOCD_PATH –f CFG_PATH –c init –c halt –c "verify_image TARGET_PATH " -c exit
复位 OPENOCD_PATH –f CFG_PATH –c init -c reset -c exit
【调试】
格式:OPENOCD_PATH -f CFG_PATH
提倡使用拖拽的方式,提升效率,也可避免输入路径出错。
执行命令,openocd会获取开发板状态,并启动协议server端。随后openocd进程挂起,等待连接。命令行中显示等待连接的端口号,此处gdb通信的端口默认为3333。
格式: GDB_PATH [FILE_PATH] [–ARGS]
无参数形式riscv-none-embed-gdb为默认的gdb cli命令。
参数形式riscv-none-embed-gdb xxxx.elf -interpreter mi 在支持cli基础上,同时支持gdb mi命令。MRS调试打开gdb trace之后,Console输出的命令就是gdb mi命令。可以复制到此模式下逐个运行。
若指定了FILE_PATH,如命令riscv-none-embed-gdb xxxx.elf ,则后续不需要调用file命令指定调试文件;若未指定FILE_PATH,则后续需要file命令指定调试文件。
设置连接配置:
set mem inaccessible-by-default off
set remotetimeout unlimited
(rv内核) set architecture riscv:rv32
target remote ip:port:连接端口
load :烧写, 执行后将pc置为程序第一条指令处;
info register + 寄存器名: 查看寄存器;
info breakpoint:查看所有断点;
break +行号/方法名/符号名:设置断点 ;
continue:继续跑到下一个断点,如果没有断点则一直运行;
next:调试执行下一步;
step:单步进入;
print:打印变量值;
list:(需要工程目录包含源码, 编译时调试等级-g以上)查看当前代码 ;
暂停状态时,可执行查看寄存器、查看当前代码,查看反汇编等操作;
gdb模式下,可输入help all列出所有命令,如搜索、变量打印、查看堆栈等。
引用: Jacktang 发表于 2021-10-19 13:11 window还是命令行操作顺手 Linux系统还要下载工具链和OpenOCD压缩包稍微麻烦一点
哈哈,一看就是编程老手了~
引用: annysky2012 发表于 2021-10-19 17:24 这么多命令行是如何记住的,很头疼。。
用得多才能记得住,习惯了界面化开发,命令行有时就回不去了...
引用: freebsder 发表于 2021-10-19 17:28 不做系统管理的话,这种命令行其实没有什么优势,一段时间不用什么都忘得一干二净了。
确实,我个人觉得这种命令行适合调用外部GCC或OpenOCD时去使用,如果采用IDE内置的工具链和调试器的话,那就别折腾了,MRS在编译、下载、调试这块的自动化做得还是可以的。
引用: Moiiiiilter 发表于 2021-10-21 09:59 确实,我个人觉得这种命令行适合调用外部GCC或OpenOCD时去使用,如果采用IDE内置的工具链和调试器的话, ...
是的,没条件的情况下那也说不得了,有条件还是ide好,双击一下就打断点了,要不还得l看代码然后b,麻烦的很。