01 虚拟示波器
说到虚拟示波器,大家应该都不陌生。在学校时开发智能车,调节PID时虚拟示波器是必须的工具。虚拟示波器软件有很多,之前我也分享过一篇文章《一个超赞的开源串口虚拟示波器项目》,基于QT的开源软件,大家有兴趣可以看一下。一般情况下虚拟示波器软件都是通过串口接收数据的,所以要求MCU通过串口把数据打包成软件支持的协议发给虚拟示波器软件。
02 J-Scope是什么
J-Scope是J-link的功能之一,J-Link是SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器。简单地说,是一个JTAG协议转换盒。关于J-Link可以看之前的文章《关于JTAG你知道和不知道的都在这里》《JLink cmd的使用》。
J-Scope也是SEGGER公司推出的,使用Jlink连接MCU后,可以在目标MCU运行时,实时分析数据并图形化显示的软件。
J-Scope可以以类似示波器的方式显示多个变量的值。它读取elf或axf文件并允许选择多个变量进行可视化。
只需将目标微控制器连接到J-Link并启动J-Scope,几个步骤即可配置J-Scope,并选择要显示的符号。如下图
J-Scope主要有RTT和HSS两种工作模式。
RTT模式:需要用户在MCU上添加代码,有点类似串口上传数据,因为有额外的代码,所以需要占用MCU的资源。优点是速度快,缺点是需要额外的代码。
HSS模式:不需要用户在MCU上添加任何代码,只需要使用J_Scope加载MDK或IAR的可执行文件即可,而且可以随时链接MCU,不影响MCU的正常功能,不需要额外的资源。使用标准的SWD接口即可。优点是不需要添加代码,缺点是速度较慢,一般为1K。
因为HSS模式不需要额外添加任何代码,所以我比较喜欢HSS模式,日常开发中也经常用到HSS模式。下文将重点讲解HSS模式。
软件准备,要使用J-Scope功能,除了一个JLink外,还需要安装J-Flash和J-Scope软件。下载链接如下
下载链接:https://pan.baidu.com/s/1KO13rZw8RVyIQPN4Qpp4-w
提取码:eqxx
03HSS模式
首先编写测试代码,将程序下载到单片机内
- #include "main.h"
- #include <math.h> /* sin */
- RCC_ClocksTypeDef RCC_Clocks;
- float x = 0;
- double sin_o = 0;
- double cos_o = 0;
- int main(void)
- {
- RCC_GetClocksFreq(&RCC_Clocks);
- while (1)
- {
- x += 1;
- if(x >= 360)
- x = 0;
- sin_o = sin(x*3.14/180);
- cos_o = cos(x*3.14/180);
- }
- }
J-Scope软件的配置
新建工程,在①处选择USB,大部分情况下我们都是使用USB连接的Jlink的,在②处在SpecifyTargetDevice处选择对应的单片机型号,在③处选择不同接口,我这里使用的SWD接口,在④处选择HSS模式,额外说明⑤处的中文乱码是us。
特别说明,在⑥处加载keil工程生成的.axf文件或IAR工程生成的.out文件。路径中最好不要有中文。点击OK完成配置。
接下来选择要观察的变量,不仅仅如下cos_o的变量,还有RCC_Clocks结构体变量也可以监控,只能选择全局变量,这也是J-Scope的局限性。
如果选择完毕,需要增加其他变量,可以在线图方框中右键,点击AddSymbols新增变量,选中已经已经添加的变量,按del键就可以删除。
点击红色按钮开始运行
两个技巧:移动下图①处的三角可以快速上下移动波形。如②处在变量上右键可以使用快捷菜单。
04 总结
J-Scope个人觉得是一个不错的工具,可以方便查看某些数据的波形,在ADC采集,温度传感器等等具有一定的作用。
比如一种情况:MCU采集温度数据,通过串口报给其他设备,这时候其他设备显示有很多异常的温度值,这个时候需要定位是MCU采集错了,还是其他设备解析数据错了。如果还在开发中,这个时候debug既可。但在已经发布的软件中,使用示波器监控解析串口数据是一个麻烦的事情,这个时候使用J-Scope就可以显示MCU采集的温度(保存在全局变量中)。不过这要求发布版本时,保存一份.ou文件或.axf文件。
J-Scope这么强大,但是依旧取代不了通过硬件串口发送给PC虚拟示波器的软件,因为J-Scope只能读取全局变量的数据,我们使用硬件串口可以将函数的局部变量发给虚拟示波器。
本文提供了一种针对发布版软件,在没有其他“埋点”打印的情况下,如何监控全局变量的方法,之前的文章《JLink cmd的使用》也提供了一种思路解决类似的问题,有兴趣的同学可以看一下。
文末说句感想,开发中使用的用具没有好坏,只是使用场景不同,多掌握几种工具,就可以多一些办法解决一些刺手的问题。
本文转载自微信公众号「知晓编程」
【编辑推荐】