RISC-V MCU开发 (七):代码调试

2023-11-11

RISC-V MCU开发 (七):代码调试

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窗口可以选择要观察的外设寄存器,一同展示的内容除外设寄存器名称外,还有地址以及描述信息。

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RISC-V MCU开发 (七):代码调试 的相关文章

  • STM32串口环形队列

    一 环线队列 在设计串口驱动的过程中 要遵循的两条准则是 1 尽量的减少程序运行的时间 2 尽量的减少程序所占用的内存 单片机相对于电脑来说 单片机的储存空间和电脑的存储空间根本不是一个量级 电脑并不用过多考虑内存的多少 而单片机就需要考虑
  • 第二章 Scala入门——让你的代码跑起来

    一 Scala的安装方法 要使用Scala 首先需要保证已经安装好了Java 8 对于Linux操作系统 Java 8已经默认安装了 而使用Windows操作系统的用户 则需要在Java官网下载安装包进行安装 请在CMD PowerShel
  • 基于STM32的IAP技术分享

    基于STM32的IAP技术分享 1 烧录过程说明 2 厂家bootloader 3 bootloader区和APP区空间划分 4 bootloader区和APP程序内容说明 5 实验 5 1实验所用到的上位机软件 5 2 bootloade
  • 和你一起从零开始写RISC-V处理器(2)

    RISC V加法指令的实现 文章目录 RISC V加法指令的实现 上期回顾 一 正片开始 编写各个模块 pc reg模块 if模块 rom模块 if id模块 id模块 regs模块 id ex模块 ex模块 二 顶层模块搭建 三 测试文件
  • GPIO口的八种工作状态

    一直对GPIO的工作状态不是很熟悉 导致在设置IO状态时 经常会设置成推挽上拉 或者推挽下拉 开漏上拉等问题 虽然看起来没有影响MCU工作 但感觉这是一种无知的表现 现在总结下GPIO口的八种工作状态 其中四种输入状态 四种输出状态 一 输
  • 吃透Chisel语言.18.Chisel模块详解(五)——Chisel中使用Verilog模块

    Chisel模块详解 五 Chisel中使用Verilog模块 上一篇文章讲述了用函数实现轻量级模块的方法 可以大幅度提升编码效率 Chisel中也提供了一些好用的函数 方便我们编写代码 也方便Chisel编译器优化生成的硬件电路 在Chi
  • STM32 CAN通信理解(是半双工还是全双工?)

    STM32F429 CAN通信 CAN 是控制器局域网络 Controller Area Network 的简称 它是由研发和生产汽车电子产品著称的德国 BOSCH 公司开发的 并最终成为国际标准 ISO11519 是国际上应用最广泛的现场
  • 【零基础玩转BLDC系列】基于反电动势过零检测法的无刷直流电机控制原理

    无刷直流电动机基本转动原理请参考 基于HALL传感器的无刷直流电机控制原理 基本原理及基础知识本篇不再赘述 目录 反电势过零检测法的原理 反电势过零检测实现方法 位置传感器的存在限制了无刷直流电机在某些特定场合中的应用 如 使电机系统的体积
  • 主线剧情0.0-Linux学习资源大综合

    Linux 学习资源大综合 对收集到的比较丰富的 Linux 学习相关的资料进行整理 注 如果链接挂了请告诉我 如果链接里的内容被删了那么直接搜文章名字试试也许会搜出来很多转载的 备份 注 在 Github 上的原版文章日后可能会更新 在其
  • 俄罗斯方块游戏(C语言)

    简介 俄罗斯方块 Tetris 是一款经典的游戏 下面是用C语言实现俄罗斯方块的示例代码 code include
  • 【ESP32】反复重启

    ESP32开发 反复重启 串口输出如下所示 rst 0xc SW CPU RESET boot 0x13 SPI FAST FLASH BOOT configsip 188777542 SPIWP 0xee clk drv 0x00 q d
  • RISC-V:PC 绝对值与 PC 相对值

    我是 RISC V 新手 我无法理解何时写入 PC 程序计数器 相对指令以及何时写入 PC 绝对指令 例如 一条指令lui其次是jalr考虑指令PC 绝对 以及一条指令auipc其次是jalr考虑指令相对于PC 据我了解 所有指令都将由 P
  • 了解用于函数调用的 auipc+jalr 序列

    我试图阅读RISC V生成的程序集gcc我发现gcc创建序列auipc jalr对于某些函数调用 我不明白它是如何工作的 这是一个简单的例子 考虑以下C源文件 unsigned long id unsigned long x return
  • 关注MCU 开发中的无限循环

    在 MCU 的开发过程中 我们经常会遇到需要使用无限循环的情况 例如 在前后台系统中 我们需要在一个无限循环中处理各种任务 在实时性操作系统中 我们也可能需要在一个无限循环中调度各个任务 那么 处理无限循环的语句有哪些写法呢 目前常见的有两
  • C语言环形缓冲区

    2024第一天 继续给自己加点料 导言 C语言环形缓冲区是一种常用的数据结构 它提供了一种高效的方式来存储和处理数据 本文将深入解析C语言环形缓冲区的定义 原理和应用 并提供一些实际的代码示例 一 什么是环形缓冲区 环形缓冲区 也称为循环缓
  • 使用 Clang 为 RISC-V 进行编译

    我正在尝试使用构建一个 hello world 程序Clang 版本 12 0 1 适用于 RISC V 架构 我已经安装了它LLVM 版本 12 0 1 具有以下设置 cmake G Unix Makefiles DLLVM ENABLE
  • 裸机 RISC-V CPU - 处理器如何知道从哪个地址开始获取指令?

    我正在设计自己的 RISC V CPU 并且已经能够实现一些指令代码 我已经安装了 RV32I 版本的 GCC 编译器 所以我现在有了汇编器riscv32 unknown elf as可用的 我正在尝试仅用一条指令来汇编一个程序 simpl
  • RISC V手册混淆:指令格式VS立即数格式

    我有一些与 RISC V 手册相关的问题 它有不同类型的指令编码 如R型 I型 就像MIPS编码一样 R type 31 25 24 20 19 15 14 12 11 7 6 0 funct7 rs2 rs1 funct3 rd opco
  • GDB 中断命令不会在命令文件中执行

    我有一个调试脚本 它执行以下操作 设置两个断点 让我们称呼他们吧start and end断点 启动后 脚本将继续执行 直到start命中断点 once start命中断点 我执行单步执行 直到end命中断点 这是我的命令文件 end br
  • RISC-V 规范引用了“hart”一词 - “hart”是什么意思?

    我找到了参考文献hart在第 35 页RISC V 2 1 规范 https content riscv org wp content uploads 2016 06 riscv spec v2 1 pdf 但是 我找不到它的定义hart在

随机推荐

  • Allegro PCB的布局

    1 手工导入元器件 place manually进入放置设置页面 在需要放置的元器件前面打勾 可以依次放置元器件 2 快速放置元器件 place Quickplace 使用快速放置功能需要先画好板宽outline才可以 3 设置room区域
  • c++实现数据结构栈和队列

    1 栈 头文件 ifndef ZHAN H define ZHAN H define MAX 8 include
  • laravel-admin安装及使用教程

    安装命令 安装 Laravel 安装器 composer global require laravel installer 创建名为 shopAdmin 项目 laravel new shopAdmin 经过漫长的等待已经安装好了 进入项目
  • springboot中注入FilterRegistrationBean不生效原因

    springboot中注入FilterRegistrationBean不生效原因 回顾 最近自定义了两个过滤器 接口请求返回加密和sql注入处理过滤器 因为在封装一些工具包 我在单独调好之后 就打算做成一个注解 像springboot启动类
  • 基于自注意力机制的LSTM多变量负荷预测

    1 引言 在之前使用长短期记忆网络构建电力负荷预测模型的基础上 将自注意力机制 Self Attention 融入到负荷预测模型中 具体内容是是在LSTM层后面接Self Attention层 在加入Self Attention后 可以将负
  • 计算机操作系统--文件管理

    文件与文件系统 1 文件 文件 File 是具有符号名的 在逻辑上具有完整意义的一组相关信息项的集合 例如 一个源程序 一个目标程序 编译程序 一批待加工的数据和各种文档等都可以各自组成一个文件 信息项是构成文件内容的基本单位 可以是一个字
  • 15_插入排序算法(附java代码)

    15 插入排序算法 一 基本介绍 插入式排序属于内部排序法 是对于欲排序的元素以插入的方式找寻该元素的适当位置 以达到排序的目的 二 插入排序算法 2 1 算法思想 插入排序 Insertion Sorting 的基本思想是 把n个待排序的
  • 每天五分钟机器学习:使用支持向量机的时候,如何选择模型参数?

    本文重点 上一章 我们学习了支持向量机的特征高维映射 也就是如何将特征映射到高维 在支持向量机中有两个参数需要调节 第一个参数是C 第二个参数是 C C 1 入 因此 C较大时 相当于 较小 意味着不使用正则化 可能会导致过拟合 高方差 C
  • kylin启动:Failed to create /kylin

    文章目录 一 当在ubuntu下执行check env sh时遇到问题 KYLIN HOME is set to usr local apache kylin 1 5 4 1 bin cat invalid option 1 Try cat
  • 用最少的线段覆盖点

    假设现有一平面网格 上有N个点 现用直线段把每个点都覆盖住 线段不能折 只能水平或者竖直方向 如何求出使用的线段最少 如下图所示 上面一个网格 有7个点 其中用三条线段就能覆盖住所有点 下图8个点 也是同样三条线段覆盖住8个点
  • 嵌入式学习笔记--GEC6818--bmp图片显示

    一 开发环境 1 ARM linux 2 ubuntu16 04 安装了GCC arm linux gcc 5 4 0 安装方法ubuntu16 04https blog csdn net qq 40592257 article detai
  • Ubuntu下FastDFS的安装

    准备工作 刚安装好的linux系统没有设置root用户密码的 下边介绍如何设置root用户的密码 由于ubtun系统默认是没有激活root用户的 需要我们手工进行操作 在命令行界面下 或者在终端中输入如下命令 sudo passwd 或者s
  • 删除数字问题

    已知n位数字正整数a 去除任意k位数 使剩下数字按原次序排列成新正整数 使其最大 C语言 include
  • 最全地理数据下载网址

    晓码创作 整理不易 转载引用请写明出处 一 国内 常见遥感影像下载网址 https mp weixin qq com s xzNGmz1fgb3IqbOV EN1Aw 1 http data cma cn site index html 中
  • Modbus驱动库—libmodbus驱动库的使用

    文章目录 为什么要使用驱动库 libmodbus简介 libmodbus常用函数 Windows平台libmodbus 使用 1 获取源代码 2 生成config h配置文件 3 编写测试代码 4 编译测试代码 Linux平台下libmod
  • C语言循环链表实现约瑟夫环问题

    问题描述 约瑟夫环问题 1 问题描述 设有编号为1 2 n的n n 0 个人围成一个圈 每个人持有一个密码m 从第一个人开始报数 报到m时停止报数 报m的人出圈 再从他的下一个人起重新报数 报到m时停止报数 报m的出圈 如此下去 直到所有人
  • 轻松入门自然语言处理系列 14 Linear-CRF模型

    文章目录 前言 一 Log Linear模型与逻辑回归 1 Log Linear模型 2 从Log Linear模型到逻辑回归 二 Linear CRF模型Inference 1 Linear CRF模型定义 2 Linear CRF模型I
  • 2021年安全员-A证免费试题及安全员-A证考试技巧

    题库来源 安全生产模拟考试一点通公众号小程序 安全员 A证免费试题考前必练 安全生产模拟考试一点通每个月更新安全员 A证考试技巧题目及答案 多做几遍 其实通过安全员 A证很简单 1 判断题 生产经营规模较小的 可以不建立应急救援组织 但应当
  • Each module has to have a unique path

    在android工作中从仓库中down下来的时候 首次运行出现 Each module has to have a unique path 使用android studio开发工具 因为同事一起把 iml文件给上传上去了 每次builde都
  • RISC-V MCU开发 (七):代码调试

    RISC V MCU开发 七 代码调试 MounRiver Studio MRS 配合GD Link WCH Link JLink等在线调试下载器 可支持GDVFx系列 CH56x CH57x CH58x CH32Fx CH32Vx等RIS