Menu Close

RISC-V软件IDE开发环境及使用(5)run_seg工程调试

本文主要介绍如何使用freedom studio 对run_seg工程进行调试。

相关参考文章:

RISC-V教学教案

 

run_seg工程的原本模块框图如下图所示:

 

run_seg工程的预期实验现象为如下所示:

1. 创建run_seg工程

  • 复制工程文件,如图1所示
    • 右键点击工程文件run_led,在弹出的菜单栏中点击copy
    • 右键点击工程列表空白位置,点击paste
    • 弹出Copy Project对话框,在Project name一栏更改工程文件名(此处建议改为run_seg),存储地址勾选默认地址,点击OK确认
    • 新建的工程文件run_seg内部包含的文件与run_led工程完全一致

 

图1 新建run_seg工程

 

  • 复制 汇编文件run_seg.Srun_seg工程文件夹内,如图2所示

 

图2 复制run_seg.S文件

 

  • 刷新工程,如图3所示
    • 在工程区中 右键选择run_seg工程,点击Refresh
    • 刷新后可以看到新添加的文件run_seg.S

 

图3 刷新后run_seg.S文件出现在工作区

 

  • 删除run_led.S文件
    • 右键单击run_led.S, 点击Delete删除run_led.S文件,在弹出窗口点击OK确认

 

图4 删除run_led.S文件

 

  • 工程编译
    • run_seg 工程名上右键点击,在弹出菜单中点击Build ProjectConsole窗口中出现以下结果说明工程编译成功,如图5,6所示

 

图5 build工程

 

 

图6 Console显示

 

2. 工程调试

  • 软件烧录
    • 在run_seg 工程上右键选择:Debug As ->Debug Configuration 打开Debug Configuration 窗口,如图7所示

 

图7 工程调试配置

 

    • debug 中创建一个新的launch configuration
    • 点击选择GDB OpenOCD Debugging,点击左上角的图标创建新烧录配置,如图8所示

 

图8 新建GDB OpenOCD Debugging

 

  • 设置Debug
    • 更改烧录配置名称为run_seg Debug(一般来说会默认是当前工程的名字 + Debug)
    • 添加 run_seg.elf文件路径,如图9所示
    • 设置完毕后点击Apply

 

图9 调试设置

    • 设置Debugger,如图10所示
      • Config options中添加config options -f test_dbg.cfg
      • 设置完毕后点击Apply

 

图10 调试设置

 

    • 设置Startup,如图11所示
      • 勾选 Set Program counter at(hex)并输入80000000
      • 设置完毕后点击Apply

 

图11 调试设置

 

    • 所有设置完成后点击debug烧录工程

 

  • 双击run_seg.S查看代码,如图12所示

 

图12 代码编辑区

 

  • 至此,观察如下所示实验现象,发现程序中的设定的loop_1和loop_2都没有被正确执行

 

3. 改正run_seg工程

  • Loop_1,在数码管上用数字1从左至右单向进行跑马灯
  • Loop_2,在数码管上用数字2从左至右单向进行跑马灯

 

图13 run_seg.S

 

  • BEQ s1,ra,LOOP_1(第189行)设置断点,如图14所示

 

图14 设置断点

    • 点击Terminate图标终止程序
    • 点击Debug图标终止程序
    • 程序暂停在添加的断点处,如图15所示

图15 断点显示

  • 查看对应寄存器中的值
    • ra的值为0x800001fc,与初始设定的0x00000001不一致,如图16,17所示

图16 设置ra的初始值

 

 

图17 ra被改变后的值

  • JAL SEG_1_LOOP(56行代码)处添加断点,如图18所示
    • 点击Terminate图标终止程序
    • 点击Debug图标终止程序
    • Register窗口显示出在语句JAL SEG_1_LOOP执行前ra的值未被改变,为之前设定的0x00000001,如图19所示

图18 添加断点

 

 

图19 ra的值未改变

  • 点击Step into进行单步执行
  • 在Register窗口中看到JAL SEG_1_LOOP语句执行后ra的值被更改为0x8000005c,由此可以确认是该语句更改了ra的值,如图20所示
  • 通过查看文档可知JAL指令会更改ra的值

图20 ra值被JAL指令修改

 

    • 把程序中的ra寄存器替换成s2寄存器(33行的LI s2,0x00000001和189行的BEQ s1,s2,LOOP_1
    • 保存修改后的程序

 

  • 再次上板实验,发现在数码管上用数字1,2从左至右单向跑马灯移动过一次后,无法重复,如下所示

 

 

  • 查看LOOP_10中的代码,发现,s1持续加1到3之后,跳到start,之后再也无法回到LOOP_1和LOOP_2,如图21所示
  • 修改代码如图22所示,可重复在数码管上用数字1,2从左至右单向跑马灯移动

图25 s1值持续加1

 

图26 修改后的程序

  • 保存修改后的代码,并重新编译,运行,其结果显示如下

 

 

 

 

附件下载

Posted in RISC-V, RISC-V 教材教案, RISC-V开发板, 开发板, 开发板使用, 教材与教案, 文章

发表评论

您的电子邮箱地址不会被公开。

Leave the field below empty!

相关链接