CSDN话题挑战赛第2期
参赛话题:学习笔记

  现在,工作重点从 ARM 架构转到了 RISC-V 架构,在使用中发现,相比于 ARM 架构,RISC-V 架构的相关基础设施要差了不少。在代码调试时尤为明显!类比于 ARM,突然想到了 SVD 文件,发现效果不多,特此记录分享一下!

介绍

  SVD(System View Description) 文件是 CMSIS(Common Microcontroller Software Interface Standard) 中的定义的一个 XML 格式的纯文本文件,其包含了芯片内核、芯片所具有的外设以及内核和外设的寄存器的完整描述(详细到寄存器的每个 BIT 位)。

  CMSIS 本身主要是针对 ARM 自家 Cortex 架构的,但是 CMSIS 足够开放,其他架构基本也可以模仿。因此,我们的 RISC-V 架构的芯片同样可以使用 SVD 文件。唯一需要注意的是 <cpu> 中的 <name> 填写 other 就可以了,其他填写规则与 ARM 一样即可(以下仅仅是个示例)。

用途

目前,SVD 主要有以下两大用途。

生成 芯片.h

  SVD 文件的内容足够详细,以至于使用相关工具命令(SVDConv.exe UX600.svd -o Output -b Output/UX600.log --generate=header)就可以根据编写的 SVD 文件直接生成芯片的顶级头文件(UX600.svd --> UX600.h)。

  注意,随着 CMSIS 规范的升级,SVD 文件内容及相应的工具出现了一些差异,尤其是生成的芯片头文件的代码格式。因此,我将两个版本的 SVD 独立保留。理论上,SVD 文件是向后兼容的,因此,这两个版本下的 SVD 基本是一致的,随便选择一个使用即可。

调试

  SVD 文件最主要的目的是调试时直接显示寄存器的每个比特位的状态。由于 ARM 在嵌入式领域的统治地位,目前,几乎所有主流嵌入式开发工具(部分可能需要依赖插件)均支持在调试时动态解析 SVD 文件。例如 Eclipse 中的使用效果如下:

注意,不同于 Keil 和 IAR 等,Eclipse 不支持实时显示寄存器值。因此,需要暂停程序执行后才可以查看寄存器值。

CMSIS

Open-CMSIS-Pack Project

  现在,ARM 牵头成了 Open-CMSIS-Pack Project,将 CMSIS-Pack 升级为一个开放的标准,以此来标准化嵌入式代码的分发。Open-CMSIS-Pack 定义了一个芯片要提供的开发包需要包含哪些目录和文件以及如何打包发布。

  Open-CMSIS-Pack Project 目前由 Linaro 与 Arm、NXP 和 ST 合作,作为孵化项目进行托管和管理。相关标准及工具都托管于 Github 仓库,主要由以下部分内容

  1. Open-CMSIS-Pack-Spec

    1. 规范源码:https://github.com/Open-CMSIS-Pack/Open-CMSIS-Pack-Spec
    2. 在线文档:https://open-cmsis-pack.github.io/Open-CMSIS-Pack-Spec/main/html/index.html
  2. 相关工具
    1. 源码仓库:https://github.com/Open-CMSIS-Pack/devtools
    2. 实用程序:预编译的可执行程序见仓库发布页面

CMSIS Version 5

  现在,ARM 自家的内核软件包(本身就被称为 CMSIS)也是根据 Open-CMSIS-Pack 制定的规范来发布的。CMSIS-Pack 中包含了大量的模板,在芯片厂商发布的软件包中,部分内容才会被实现。

  1. 源码仓库:https://github.com/ARM-software/CMSIS_5
  2. 在线文档:https://arm-software.github.io/CMSIS_5/latest/General/html/index.html
  3. 实用工具:包含于 CMSIS-Pack 的 CMSIS/Utilities 中,内含 SVD 转换工具,PACK 检测工具。实际就是从 https://github.com/Open-CMSIS-Pack/devtools 直接拿过来的。

CMSIS Version 4

  CMSIS 原本是 ARM 自家为了自己的 Cortex-M 核制定的一些列规范。旧版本的 CMSIS 也是采用 CMSIS-Pack 发布,但是部分模块没有提供源码。旧版已经不再维护,但是目前有部分芯片软件包还在使用旧版规范及相关工具。

  1. 源码仓库:https://github.com/ARM-software/CMSIS
  2. 在线文档:https://arm-software.github.io/CMSIS_5/latest/General/html/index.html
  3. 实用工具:包含于 CMSIS-Pack 的 CMSIS/Utilities 中,内含 SVD 转换工具,PACK 检测工具。这里面是旧版工具!

使用

  目前,绝大多数嵌入式开发工具都支持手动导入 SVD 文件。部分工具(例如,Keil)也使用二进制的 SFR 文件,需要使用命令 SVDConv.exe UX600.svd --generate=sfr -o Output 手动将 SVD 文件转换为二进制的 SFR 文件。

SfrCC2.Exe 就来自于 Keil

eclipse

调试配置界面有专门的 TAB 页来运行用户指定 SVD 文件,如下图所示:

进入调试界面,就可以在 Peripherals 标签下,看到我们添加的外设,选中想要查看的外设,就可以显示外设寄存器。

错误检查

  SVD 文件是一个 XML 格式的文本文件,可以使用任何编辑器进行编辑。并且,通过使用以下命令可以检查我们写的 SVD 文件是否有错误:

  1. 执行 SVDConv.exe UX600.svd -o Output -b Output/UX600.log 确保 0 错误 0 警告
  2. 执行 SVDConv.exe UX600.svd --generate=sfr -o Output 确保 0 错误 0 警告

RISC-V 之一 使用 ARM CMSIS 的 SVD 文件辅助调试相关推荐

  1. RISC V (RV32+RV64) 架构 整体介绍

    文章目录 riscv 市场 芯片介绍 软件介绍 开发板介绍 PC介绍 riscv 架构 编程模型(指令集/寄存器/ABI/SBI) 运行状态 指令集 寄存器 riscv32和riscv64两者的区别 ...

  2. 计组学习笔记2(RISC v版)

    指令集解释 (规定:R[r]表示通用寄存器r的内容,M[addr]表示存储单元addr的内容,SEXT[imm]表示对imm进行符号扩展,ZEXT[imm]表示对imm进行零扩展) 整数运算类 -U型 ...

  3. ARM CMSIS DAP源码分析

    转ARM CMSIS DAP源码分析(一)_穿透灵魂的鼓点的博客-CSDN博客 结合ARM文档ADIv5,分析一下ARM提供的CMSIS DAP的开源代码,写点个人心得. 1.USB的整个传输有2个全 ...

  4. 使用sdk-npi-enablement-tool生成SVD文件和芯片头文件

    使用sdk-npi-enablement-tool生成SVD文件和芯片头文件 文章目录 使用sdk-npi-enablement-tool生成SVD文件和芯片头文件 Introduction Over ...

  5. oracle v rman status,RMAN 中V$ARCHIVED_LOG 中STATUS 为X 的文件处理

    记录一下[@more@] 今天发现RMAN 中V$ARCHIVED_LOG 中STATUS 为"X" 的文件,想起是因为手动删掉错几个日志造成的,通过如下的方法把RMAN 中的记录 ...

  6. ARM程序的镜像文件以及在内存中的分区

    最近在对程序的编译和运行机制比较感兴趣,总结了一些关于ARM生成的镜像文件和在内存中的内容,同时还有一些疑问,欢迎大家指教. 首先,程序主要有以下三部分组成: RO:指程序的指令和常量(我们的代码编译 ...

  7. QNX系统ARM架构上protobuf文件读取乱码

    QNX读取在ARM核心上读取文件,发现所有数字除了0之外都是乱码 -4.34189e+123 怀疑是读取的时候大小端搞错了,在GitHub上查,发现已经有人注意到这个问题 Bug: Big endia ...

  8. ARM开发之dst文件详解

    1.    ARM Device Tree起源 Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称"this whole ARM thing is a f*c ...

  9. 安装Ubuntu RISC V toolchain失败(网速、git配置原因)

    git获取大容量工程出错:RPC failed: curl GnuTLS recv error : Decryption has failed. error: RPC failed; curl 56 ...

  10. 8篇文章系统梳理ARM开发中的文件类型

    关注痞子衡专栏公众号,第一时候获得嵌入式技术文章推送,让痞子衡带你玩转嵌入式. 本系列给大家讲的是嵌入式开发里的各种文件,分为3个阶段共8篇文章,本系列以IAR集成开发环境开发ARM Cortex-M ...

最新文章

  1. javascript元素跟随鼠标在指定区域运动
  2. 深入理解分布式技术 - 缓存高可用
  3. easyui框架前后端交互_easyui前后端分离
  4. C#的未来:简化参数空值验证
  5. 最大公约数,最小公倍数,质因式分解
  6. cassandra可视化工具_一位数据科学家的私房工具清单
  7. Oracle使用rman备份数据库时出现cannot reclaim的错误
  8. CUDA:在GPU上实现核函数的嵌套以及编译运行
  9. 如何用 SQL 做留存率分析?
  10. java内存泄露 垃圾回收_Java面试中底层垃圾回收、代码安全、内存泄露
  11. 自从我不管事后,员工们肯定舒心多了
  12. 【转】西冷牛排,菲力牛排,眼肉牛排,雪花牛排,T骨牛排,沙朗牛排有什么不同?
  13. java long型时间戳_深入理解java long 存储时间戳
  14. 工业大数据漫谈5:工业大数据案例(上)
  15. 【ROS】ubuntu20.04+ROS安装上遇到的坑(主要是time out)
  16. css鼠标滑过图标显示_CSS和jQuery教程:苹果风格的花式图标滑出导航
  17. iPhone X(iOS 14.6)在Win 10上使用iRemoval PRO v5.1.2进行越狱
  18. 浅析嵌入式系统的发展趋势
  19. 元宇宙赋能企业营销及品牌发展
  20. 毕业后我尝试过的副业

热门文章

  1. JavaWeb(二)Servlet和JSP简介
  2. 网吧无盘最新服务器配置,80-100台网吧无盘服务器配置方案建议
  3. VB/VBA之死,何时休?
  4. 如何将mpg格式转换为mp4格式?
  5. VARCHART XGantt Activex 5.2.095 Crack
  6. 批处理for循环逐一处理目录中的文件
  7. matlab 三边测量,三边测量的定位算法,matlab转为c
  8. 阅读ArrayList源码的一些记录
  9. 《博弈论全家桶》(ACM / OI)(超全的博弈论 / 组合游戏大合集)
  10. 深度学习?不一定非得搞“黑箱”