RTT in JsCope

RTT in JsCope

Porcovsky Lv3

相较于vofa,使用HSS模式下的jscope最大的缺点在于可加变量较少(四五个左右就寄几),采样帧率较低(v9能到1000帧,普通jilnk 100帧),无法查看C++文件中的变量,RTT模式下的jscope可以克服这些弱点,采用和vofa一样的指令式发送曲线数据(而不是像HSS一样从elf文件里读取变量地址),且相较于vofa可以少占用一个串口,且系统开销远小于vofa,理论采样速率上限远高于vofa(RTT指令速度接近一个memcpy的时间)

REF

利用J-Scope RTT 模式实现高速(20K)曲线打印

J-Link_script_files

RTT源码迁移

这一点与RTT Viewer那里的迁移方法一致

Jlink-RTT扫频

代码端配置

1.初始化

1
2
3
4
5
6
7
8
9
10
#include "SEGGER_RTT.h"
#define RTT_BUFF_LENTH 1024
uint8_t buf[RTT_BUFF_LENTH]; //定义全局变量
void User_BSP_Init(void)
{
// Initialize RTT Viewer terminal
SEGGER_RTT_SetTerminal(0);
SEGGER_RTT_ConfigUpBuffer(1, "JScope_u2", buf, RTT_BUFF_LENTH, SEGGER_RTT_MODE_NO_BLOCK_SKIP);//初始化RTT
// ………………
}

SEGGER_RTT_ConfigUpBuffer注意事项

第一个参数buffer号必须填 1,因为0 buffer应该是默认被RTT Viewer占用(因此RTT Viewer和JSCOPE RTT可以同时使用)

第二个参数向RTT表明了数据类型,这里一定要严格按格式写
20250616215231

第三个参数是BUFF长度

第四个参数是RTT模式,就选SEGGER_RTT_MODE_NO_BLOCK_SKIP就可以了

2. 循环调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
uint16_t demo_;
float demo_mag = 5000;
float demo_T = 1;
uint32_t demo_tick =0;

void DemoTaskFunc(void const * argument)
{
/* USER CODE BEGIN DemoTaskFunc */
/* Infinite loop */
for(;;)
{
demo_tick++;
demo_ = (uint16_t)( demo_mag*sin(2*3.14*demo_tick/(1000.f*demo_T))+demo_mag);
SEGGER_RTT_Write(1, &demo_, 2); //JSCOPE RTT demo
SEGGER_RTT_printf(0,"hello world %d \n",demo_) // RTT Viewer demo
osDelay(1);
}
}

SEGGER_RTT_Write参数

第一个是buffer号,跟初始化第一个参数一样

第二个是数据地址

第三个是数据长度

Jscope端配置

为了解决JSCOPE 的RTT内核找RTT地址大概率失败的问题,我们直接用jlinkscript指定地址

不然就会有这样的BUG

用RTT VIEWER教程中同样的方法在 .map中找出 _SEGGER_RTT的地址(我这里是0x24000f88 ),然后在工程总目录里手动创建jscope配置文件 demo.JLinkScript ,指定RTT地址。

demo.JLinkScript文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*********************************************************************
* (c) SEGGER Microcontroller GmbH & Co. KG *
* The Embedded Experts *
* www.segger.com *
**********************************************************************

-------------------------- END-OF-HEADER -----------------------------
*/

int OnTargetConnect(void) {
// Set RTT control block address
JLINK_RTTERMINAL_SetControlBlockAddr(0x24000f90);
return 0;
}

/*************************** end of file ****************************/

20250616215411
然后在jscope中创建新工程:

  1. 一定要选中最具体的MCU,而不是M4 或者M7之类的
  2. 选刚刚创建的demo.JLinkScript
  3. 选RTT

然后先启动keil debug,开始运行,然后就可以开始Jscope了

  • 标题: RTT in JsCope
  • 作者: Porcovsky
  • 创建于 : 2025-06-16 21:51:45
  • 更新于 : 2025-06-16 22:00:53
  • 链接: https://pocro.github.io/2025/06/16/RTT-in-Jscope/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
 评论