在进行嵌入式开发过程中,需要查看某些实时变化的变量,以MDK为例我们通常都是进入DEBUG模式下去肉眼观察,这种方式不太人性化,也比较容易错失掉许多细节。为此我介绍一款可以将需要观察的变量以图形化的方式打印到电脑中,方便实时观察。
常见的上位机,比方说freemaster ,AutoCan等都需要额外占用单片机的通信口。在一些io口比较敏感的项目中,通常都难以实施,而且受限于芯片本身的资源以及通信速率,通常也无法做到实时观察。
JScope是SEGGER公司推出的,可以在MCU运行时,实时分析数据并图形化显示的软件,它是通过SWD协议与底层通信,因此不需要占用额外的io口。JScope以类似示波器的方式显示多个变量的值,它通过读取编译后的elf或axf文件获取变量的地址进而获取变量的数值。对于用户来说只需将目标微控制器连接上Jlink并启动JScope即可。
JScope有两种显示方式,HSS方式只支持1kHz的采样率,但是已经能够满足常见的开发需要了,但是对于电机控制而言显然还是不够的。还有一种是RTT模式,可以与你的adc中断同步运行,就可以实现在环调试了,但RTT模式需要用户自行添加代码,本次先介绍下HSS模式的使用方法,下次再介绍RTT的打印模式。
前期准备
安装Jlink驱动:[V7.92f][64][JLink_Windows_V792f_x86_64.exe]
安装JScope:SEGGER官网没找到,有需要的小伙伴可以私信我获取
使用方法
编写测试代码
#define M_PI 3.141592654f
#define M_TWO_PI 6.283185307f
#define TS 0.001f
typedef struct{
float ts;
float omega;
float theta;
float sinval;
float cosval;
}jscope_debug_t;
jscope_debug_t jscope_debug = {
.ts = TS,
.omega = 2.0f * M_PI * 10.0f,
};
void jscope_debug_run(jscope_debug_t *p)
{
p->theta += p->omega * p->ts;
p->theta = (p->theta > M_PI) ? (p->theta - M_TWO_PI) : (p->theta);
p->theta = (p->theta < -M_PI) ? (p->theta + M_TWO_PI) : (p->theta);
p->sinval = sinf(p->theta);
p->cosval = cosf(p->theta);
return;
}
//放入1ms时基中运行,我是放在系统滴答中断里跑的,你们可以自行选择时基,记得修改TS
//jscope_debug_run(&jscope_debug);
上述步骤完成后,点击启动按钮即可看到波形了,拖动测量线即可观察特定点的数据