• Rocket


    https://mp.weixin.qq.com/s/8yYLVg-RXX3XX0T431lxeA

     

    介绍riscv debug接口的使用实例:使用Program Buffer读取寄存器。

     

     

    1. Write mstatus using program buffer

     

     

    1) csrw s0 MSTATUS

     

    csrw用于写CSR,这里是把s0写入到mstatus中。

     

    2) ebreak

     

    ebreak被debugger用于把控制权返回给调试环境,这里就是执行完Program Buffer中的程序之后,执行ebreak指令,返回调试环境。

     

    3) Program Buffer

     

    Program Buffer用于存放一小段程序,让被暂停的核心执行:

     

    Program Buffer可以与抽象命令结合使用,使能抽象命令中的postexec位,在执行完该抽象命令后即可执行一次Program Buffer中的指令:

     

    Program Buffer中的指令执行完成之后,需要执行ebreak指令返回调试环境:

     

    4) progbuf0

     

    从progbuf0开始的一组寄存器用于提供对Program Buffer的访问,可访问的寄存器数量取决于progbufsize的值。

    5) postexec of Accessing Register Abstract Command

     

    当抽象命令用于访问寄存器时,有一位用于使能postexec。其取值决定了执行完该抽象命令后,是否执行Program Buffer中的指令。

     

    6) 实例

     

    首先,准备Program Buffer:

    a. 把指令csrw s0, mstatus写入progbuf0;

    b. 把指令ebreak写入progbuf1;

    其次,准备抽象命令:

    c. 把要写入mstatus寄存器的数值写入到data0寄存器;

    d. 写command寄存器,执行抽象命令:把data0中的数据,写入到s0寄存器(x8, regno=0x1008);该抽象命令中,postexec置位,即:在执行完该抽象命令后,执行Program Buffer中的指令。

     

    总结一下,写寄存器过程如下:

    a. 把数据写入data0;

    b. 执行抽象命令,把data0中的数据,写入到s0;

    c. 执行Program Buffer中的csrw指令,把s0写入到mstatus;

    d. 执行Program Buffer中的ebreak指令,返回调试环境;

     

    2. Read f1 using program buffer

     

     

    1) fmv

     

    该指令在riscv-spec中定义,用于在浮点寄存器和整型寄存器之间转移数据:

     

    2) 实例

     

    首先,准备Program Buffer:

    a. 把指令fmv.x.s s0, f1写入progbuf0;

    b. 把指令ebreak写入progbuf1;

    其次,执行抽象命令:

    c. 把command寄存器中的postexec置位,transfer=0表明抽象命令不执行传输任务,也就是comand只用于触发执行Program Buffer中的指令;指令执行完之后,f1的值被移动到s0;

    d. 写command寄存器,transfer=1, write=0,表示该抽象命令是读寄存器;regno=0x1008表示把s0寄存器的值传入data0中;

    e. 读取data0寄存器即可获取到从f1传过来的数据;

     

  • 相关阅读:
    devise 异步发邮件
    ubuntutweak for lucid
    960gs blueprint
    Amoeba for mysql 0.31发布(读写分离、负载均衡、Failover、数据切分)
    Google App Servlet容器转型 – 从Tomcat到Jetty
    DBeaver
    用simple from暂不用formtastic
    [SQL Server]ORDER BY的问题
    PHP pathinfo() 函数
    php中使用head进行二进制流输出,让用户下载PDF等附件的方法
  • 原文地址:https://www.cnblogs.com/wjcdx/p/11845890.html
Copyright © 2020-2023  润新知