CubeMX+VSCode+Ozone的STM32开发工作流(三)利用Ozone进行可视化调试和代码分析

news2025/1/23 4:00:38

neozng1@hnu.edu.cn

本教程的示例代码是笔者参加RoboMaster机甲大师赛为机器人编写的控制器框架,你可以直接克隆仓库,阅读仓库下的Markdown文档获得更好的体验,记得点一个小⭐: basic_framework: basic_framework (gitee.com)
所有安装包也可以在此百度网盘链接下获得:
链接: https://pan.baidu.com/s/1sO_EI4cToyIAcScOQx-JSg?pwd=6666
提取码:6666
Ozone暂时只支持jlink。
22/11/16 重要更新:安装Ozone3.24 32-bit和J-Link7.22b目前可以支持J-link和 dap-link/cmsis-dap

软件安装

安装Ozone和J-link工具箱(驱动、gdb以及各种调试工具)。安装包都在网盘链接。

注意,如果希望支持daplink(包括正点原子无线调试器),请务必安装网盘对应的版本(Ozone3.24 32-bit和J-Link7.22b)。

经过测试发现只有32位的ozone3.24支持daplink。

应该先安装Ozone,再安装jlink。以下为步骤:

  1. 安装Ozone

这一步注意选择install a new instance(安装一个新的实例)。后续一路确认即可。

2. 安装jlink

这一步注意不要勾选update dll in other application,否则jlink会把ozone里面老的驱动和启动项替代掉。choose destination和ozone一样,选择install a new instance。如果安装了老的相同版本的jlink,请先卸载(版本相同不用管,直接新装一个)。

3. 替换动态链接库
将网盘上下载的JLinkARM.dll放到JLink和Ozone的安装目录下,替换原来的库。下载下来的库经过修改,使得J-LinkOB在使用的时候不会报“The JLink is defective"和”you are using a clone version“的错误。
之后如果安装其他版本的jlink,也请注意不要勾选update DLL in other application,否则会替换掉修改过的动态链接库。

配置调试项目

安装好两个软件之后,打开ozone后会显示一个new project wizard,如果没有打开,在工具栏的File-> New -> New project wizard。

选择M4内核,为了能够查看外设寄存器的值还需要svd文件。所有mcu的svd都在图中的文件夹里提供,当然你也可以使用我们仓库根目录下的文件。

接口选择swd,接口速度不需要太高,如果调试的时候需要观察大量的变量并且使用日志功能,可以调高这个值。如果连接了jlikn,上面的窗口中会显示。如果链接了dap-link,比如无线调试器,会出现Unknown CMSIS-dap。选择你要使用的调试器,然后继续。

选择构建之后生成的.elf文件(在项目文件夹下的build中)。这是调试器专用的文件格式,对其内容感兴趣可以自行搜索细节。此外ozone还支持.bin .hex .axf(最后一个是amr-cc,也就是keil的工具链会生成的)等格式。

这页不要动。如果希望保存jlink的调试日志,最后一个选项选择一个文件或者新建一个日志文件。

常用调试窗口和功能

下图的配置是笔者常用的layout。每个窗口是否显示、放在什么位置等都是可以自己定义的。通过工具栏的view选项卡可以自行选择需要展示的窗口。

  1. 调试控制:和vscode类似
  2. 变量watch窗口,这里的变量不会实时更新,只有在暂停或遇到断点的时候才会更新。若希望实时查看,在这里右键选择需要动态查看的变量,选择Graph,他就会出现在窗口8的位置。
  3. 断点和运行追踪管理
  4. 调试控制台,输出调试器的信息。
  5. 终端,支持一些jlink script的命令。单片机通过log模块发送的日志也会显示在这里。
  6. 代码窗口,用于添加断点、添加查看等。鼠标悬停在变量上可以快速查看变量值和类型。希望打开整个项目文件,点击工具栏的view选项卡,单击Source Files就可以打开一个项目中所有源文件的窗口。右键点击函数或变量可以跳转到定义和声明、查看汇编代码等。按F12跳转到定义。
  7. 变量可视化窗口,这就是Ozone的大杀器。在变量添加到查看(watch)之后,右键点击watch中的变量选择Graph,变量会被添加到可视化查看中。你可以选择“示波器”的显示时间步长以及颜色等信息,还可以更改采样率。
    注意,如果添加到动态调试窗口中没有反应,请在窗口8中修改一下”Sample Freq“为100Hz或200Hz即可
  8. 窗口8和7配合。在窗口8中会实时显示变量值,并且统计平均值和最大最小值,而且还会将所有采样值保存到一个csv文件当中,如果需要进一步分析可以导出这个数据文件。
  9. 内存视图。可以直接查看任意内存位置的值。
再次注意,这些窗口是否开启以及位置都是可以自定义的。
另外,如果使用dap-link,调试过程中可能会反复提示没有license,请查阅basic_framework: basic_framework (gitee.com)获取解决方案。

如果在调试过程中发现bug或者需要更改代码,不需要终止调试或者关闭窗口。直接前往vscode修改并重新编译,Ozone会自动检测到.elf文件的变化,询问你是否重新加载项目。选择是后会自动开始下载并进入调试。

  • 变量动态查看(可视化)
    • 如果没有打开窗口,现在view->timeline中打开可视化窗口。动态变量查看的窗口也在view->data sampling。
      启用动态变量查看的流程如下:


在代码窗口中选中需要观察的变量添加到watch窗口在watch选择要动态查看的变量添加到Datasample窗口

第一步的快捷键是ctrl+w,选中变量之后按。
第二部的快捷键是ctrl+g,选中watch中的变量后按。
第三步可以修改示波器的步长和采样频率。

    • 如果当前文件没有你要的变量,你想查看项目中的其他文件夹,在view-> source files中可以打开该项目所有的源文件,双击可以打开源文件。

在变量的watch窗口右键点击变量,选择一个refresh rate也可以实时查看变量(和keil一样)。

  • 日志打印

在Terminal窗口查看,还可以通过命令直接控制单片机的运行(不过不常用)。

未打开窗口则在view-> terminal中打开。

  • 外设查看

在view-> register中打开窗口,选择Peripherals可以查看所有外设寄存器

CPU选项卡可以查看CPU的寄存器。

  • 调用栈

在view-> call stack中打开窗口。

常用快捷键

组合功能
ctrl+w添加到查看
ctrl+g添加到动态查看(需要先添加到查看)
f12跳转到定义
f5启动调试
f10单步跳过
f11单步进入
shift+f11单步跳出
右键+break on change当变量发生变化的时候进入此断点
ctrl+H展示调用图,会列出该函数调用的所有函数(内部调用栈)

保存调试项目

退出时可以将调试项目保存在项目的根目录下,方便下次调试使用,不需要重新设置。可以为jlink和daplink分别保存一套调试配置。

附录1:为daplink添加license

在网盘上下载daplink_register_license.rar,解压出来之后打开。请关闭杀毒软件。

根据Ozone打开时提示的daplink的序列号,将其输入注册机,电机generate,就会生成5个license。

windows菜单搜索J-link license manager,点击添加license,将注册机生成的五个license依次复制黏贴并添加到的license manager中即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/25983.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]Python计算机毕业设计宠物领养系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

Word处理控件Aspose.Words功能演示:使用 Python 查找和替换 Word 文档中的文本

很多时候,您需要替换 Word 文档中的特定文本或短语。MS Word 具有针对此类情况的内置功能,您可以一键替换所需的文本。在本文中,您将学习如何使用 Python 以编程方式查找和替换 Word 文档中的文本。当您需要替换一堆文档中的文本时&#xff0…

Redis的分布式锁问题(九)Redis + Lua 脚本实现分布式锁

Redis的分布式锁问题(九)Redis Lua 脚本实现分布式锁 上集回顾 Lua的简单介绍 redis调用函数 set name jack set name Rose,再执行get name redis的 EVAL 命令 Lua脚本解决unLock业务流程 代码实现 unLock.lua RedisTemp…

APS自动排程在制药行业的应用

制药企业,作为流程工业的一种,既有流程工业所具有的共性也有特殊性,通过发酵、萃取、灌装等生物、化学、物理变化,产生新物质达到增值目的。通常以批量或连续的方式进行生产,需要严格的过程控制和安全措施。生产运行、…

hadoop 3.x大数据集群搭建系列4-安装Spark

文章目录一. 下载spark和scala并解压二. 配置SPARK_HOME环境变量三. 修改配置3.1 修改 spark-defaults.conf3.2 修改spark-env.sh3.3 修改slaves文件四. 将spark目录分发到其他节点五. 启动Spark集群六. 在web界面查看Spark UI七. 测试八. Yarn模式8.1 启动hdfs、yarn服务8.2 修…

笔记本电脑自带录屏吗?笔记本电脑怎么录屏

​现如今,电脑屏幕录制功能越来越成为我们生活中不可或缺的一部分。比如网课录制、游戏画面、软件教程等。很多小伙伴可能知道笔记本电脑拥有录屏功能,但是却不知道笔记本电脑怎么录屏。下面就让小编详细介绍一下,笔记本电脑录屏的方法。 一&…

骨传导耳机的利与弊有哪些?骨传导耳机到底好不好?

耳机大家应该都知道,但是骨传导耳机,大家或许就有点陌生了。目前网上也有很多关于骨传导耳机的科普和盘点,但是个人认为都过于零碎不明了,而我今天就用我玩骨传导耳机好几年的经验和知识,以骨传导用户的角度写了这篇文…

接口幂等设计

文章目录如何设计幂等幂等设计的基本流程建防重表根据状态机分布式锁获取 token如何设计幂等 既然这么多场景需要考虑幂等,那我们如何设计幂等呢? 幂等意味着 一条请求的唯一性。不管是你哪个方案去设计幂等,都需要一个全局唯一的ID&#xf…

【第五部分 | JS WebAPI】2:DOM 元素操作

目录 1-1 改变元素内容(去除html和空格换行) 1-2 改变元素内容(保留html和空格换行 用的最多) 1-3 获取元素的内容 [ 更多其它可操作的元素属性 ] 2-1 修改元素的属性 2-2 修改表单元素属性 2-3 使用this指向函数调用者 3…

day35 XSS跨站反射存储DOM盲打劫持

前言 #知识点: 1、XSS跨站-原理&攻击&分类等 2、XSS跨站-反射型&存储型&DOM型等 3、XSS跨站-攻击手法&劫持&盗取凭据等 4、XSS跨站-攻击项目&XSS平台&Beef-XSS 1、原理 指攻击者利用网站程序对用户输入过滤不足,输…

redis<二>spring使用redis,配置远程登录和密码

使用默认的redis配置 改pom, 加入redis依赖,版本可以不需要写&#xff0c;由spring的父工程控制。 <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis --> <!--整合redis--> <dependency><groupId>…

Spring Bean基础-4

1. 定义Bean: 什么是BeanDefinition? 什么是BeanDefinition?BeanDefinition 是 Spring Framework 中定义 Bean 的配置元信息接口, 包含: Bean 的类名Bean 行为配置元素, 如作用域、自动绑定的模式、生命周期回调等其他 Bean 引用, 又可称作合作者 (Collaborators) 或者依赖 …

Feign的简介及使用

一、Feign简介 Feign是一个声明式的http客户端&#xff0c;官方地址:https://github.com/OpenFeign/feign 其作用就是帮助我们优雅的实现http请求的发送&#xff0c;解决代码可读性差&#xff0c;编程体验不统一、参数复杂URL难以维护的问题。 二、使用Feign的步骤 1.引入依赖…

网络原理(Java网络编程)

1.局域网和广域网 局域网LAN: 即 Local Area Network,简称LAN. 局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的.局域网一般可以由交换机或路由器组建. 广域网WAN: 即 Wide Area Network,简称WAN. 广域网是将多个局域网…

【28-业务开发-基础业务-属性管理-SKU和SPU基本概念-SKU和SPU关联关系-属性实体之间的关联关系-批量菜单创建】

一.知识回顾 【0.三高商城系统的专题专栏都帮你整理好了&#xff0c;请点击这里&#xff01;】 【1-系统架构演进过程】 【2-微服务系统架构需求】 【3-高性能、高并发、高可用的三高商城系统项目介绍】 【4-Linux云服务器上安装Docker】 【5-Docker安装部署MySQL和Redis服务】…

力扣(LeetCode)32. 最长有效括号(C++)

栈模拟 合法的括号序列满足两条性质&#xff1a; 1.左括号数等于右括号数 2.任意前缀里&#xff0c;左括号数大于等于右括号数。 括号匹配和栈很般配&#xff0c;遇到左括号&#xff0c;下标入栈&#xff0c;遇到右括号&#xff0c;弹栈匹配。 这题的前缀里有两种不合法&…

【LSTM回归预测】attention机制LSTM时间序列回归预测【含Matlab源码 1992期】

⛄一、attention机制LSTM预测 1 总体框架 数字货币预测模型分为两部分&#xff0c;由LSTM模块和Attention模块组成。 2 LSTM模块 长短期记忆网络&#xff08;LSTM&#xff09;是一种特殊的递归神经网络&#xff08;RNN&#xff09;模型&#xff0c;是为了解决RNN模型梯度消失…

【Codeforces Round #835 (Div. 4)】A——G题解

文章目录A Medium Number题意思路代码B Atillas Favorite Problem题意思路代码C Advantage题意思路代码D Challenging Valleys题意思路代码E Binary Inversions题意思路代码F Quests题意思路代码G SlavicGs Favorite Problem题意思路代码A Medium Number 题意 三个数&#xf…

窗口-视口转换(详细)

在QPainter中&#xff0c;绘制图像使用逻辑坐标绘制&#xff0c;然后再转化为绘图设备的物理坐标。 窗口&#xff08;window&#xff09;&#xff1a;表示逻辑坐标下的相同矩形视口&#xff08;viewport&#xff09;&#xff1a;表示物理坐标下的指定的一个任意矩形默认情况&am…

中国互联网大会天翼云展区大揭秘!

11月15日&#xff0c;由工业和信息化部、深圳市人民政府主办&#xff0c;中国互联网协会、广东省通信管理局、深圳市工业和信息化局等单位承办的2022&#xff08;第二十一届&#xff09;中国互联网大会在深圳开幕。本届大会以“发展数字经济 促进数字文明”为主题&#xff0c;聚…