MDK-Scope联合调试 RTT模式 多通道
1.基本配置
添加RTT的.C和.H文件到MDK工程中,RTT模式所需的文件可以到scope安装目录下找到,参见下图1
图1:文件添加
2.两个函数添加
一是通道配置函数: SEGGER_RTT_ConfigUpBuffer(1,"JScope_u2",buf,1024, SEGGER_RTT_MODE_NO_BLOCK_SKIP);
参数分析:
1:是通道设定,通过实验验证只能设定为1,虽然Scope本身通道限制最大值为3
JScope_u2:数据格式,JScope_是固定开头,数据类型参照下面就行
Buf:缓冲数组
1024:缓冲数组大小,这个可以根据实验效果来确定,如果发送的速度快且数据多,设定较大;常设512/1024/2048;另外如果Jlink仿真器版本较高(性能好),可以设定小一点的值
SEGGER_RTT_MODE_NO_BLOCK_SKIP:数据处理模式,一般选这个就行
二是发送数据函数:
SEGGER_RTT_Write(1, &data[i], N);
参数分析:
1:上面设定的通道(只能为1)
&data[i]: 要发送的数据指针/数组,
N: data[i]的数据字节长度,8位时N=1; 16位时N=2; 32位时,N=4
参数详细设定可见Jlink手册
- Jscope配置,看图2
图2:Jscope配置
我们这里使用Jlink转SWD模式,没有使用JTAG模式
3.多通道设置
很多关于scope的RTT模式教程都是单通道的,这里就详细说一下多通道显示设置步骤
(1)通道配置
SEGGER_RTT_ConfigUpBuffer(1,"JScope_u2",buf,1024, SEGGER_RTT_MODE_NO_BLOCK_SKIP);
只更改一个参数就行:
JScope_u2:是1个通道
JScope_u2u2: 是2个通道
…
有上可知只要在JScope_后面增加对应的数据类型说明就行;
示例2个通道输出
SEGGER_RTT_ConfigUpBuffer(1,"JScope_u2u2",buf,2048, SEGGER_RTT_MODE_NO_BLOCK_SKIP);
如果通道数增加,当然对应的缓冲大小也应该增加;
(2)数据发送:再增加一组数据发送就行
SEGGER_RTT_Write(1, &SineWave128[(i++)%128], 2);//发送通道1
SEGGER_RTT_Write(1, &SineWave[(j++)%128], 2);//发送通道2
(3)效果展示:2通道数据波形
这里是20KHz发送频率,2个通道16位数据模式
图3:波形1
图4:波形2
这里给大家对比一下:缓冲大小设定的影响:
图3和图4是一样的配置输出:输出正弦波
但是我们看到图3中出现波形的不正常显示,那是因为设定缓冲2048;
修改后,图4是正常的,设定缓冲4096
所以大家根据实际效果来调整缓冲大小,只要确保波形输出正常即可
