单片机调试工具J-Scopex使用说明 以及实时传输 RTT函数应用
关于
J-Scope 是一个免费软件,用于在目标运行时实时分析和可视化微控制器上的数据。采样可以使用 SEGGER 高速采样 (HSS)或 SEGGER 实时传输 (RTT) 技术进行。这两种技术都可用于提供后台内存访问的所有 MCU。
SEGGER高速采样(HSS)或SEGGER实时传输(RTT)两钟技术进行采样,所有提供后台内存访问的MCU都可以使用这两种技术。SEGGER(HSS)无需进一步准备即可使用。SEGGER (RTT)使采样速度更快,但这需要对目标应用程序进行检测。
配置
通过双击可执行文件启动,将出现欢迎对话框。选择"创建新项目",然后按"确定"。将打开配置对话框。
异步模式 (HSS)
HSS 模式通过定期对内存位置进行采样。因此,采样率和ELF文件是必需的。ELF 文件用于确定采样符号的内存地址。将符号声明为"volatile"是一种好的做法,以便尽快将其写入内存。
同步模式 (RTT)
使用 RTT 模式,必须在目标应用程序中实现 RTT。
采样
数据采样可以通过工具栏上的记录按钮(红点)启动。采样开始时,将自动建立与 J-Link 或正在运行会话的连接。
项目管理
项目配置(即 J-Link 连接设置、应用程序文件和所选符号的配置)可以保存到 J-Scope 项目文件 (.js-cope)。J-Scope 项目可用于进一步会话,并用于不同用户之间的交流。
打开项目文件,用户可以在启动对话框中选择"现有项目",使用"打开项目…" 在 J-Scope 中打开项目文件。在"文件"菜单中选择"最近项目>"子菜单中列出的最近使用的项目文件之一。
如果以前采样的任何数据已保存到文件中,J-Scope 将自动打开与项目关联的最新数据文件。
数据导出到 CSV
当前在缓冲区中的采样数据可以导出为 CSV 格式,由其他工具(例如 Microsoft Excel、Apple Numbers 或 LibreOffice Calc)等打开和分析,通过选择"文件"=“导出数据…”
数据导出到 RAW
当前在缓冲区中的采样数据可以保存为 RAW 格式,J-Scope 可以在以后的时间点重新打开该格式。RAW 数据文件只能在符号配置与最初用于采样数据的项目中使用。
创建的最新 RAW 文件的位置将保存在项目文件中相对于项目文件的位置。请确保在导出数据文件后保存项目。如果加载了关联的项目,将打开数据文件。
界面介绍
选择对话框
I. 分类模式,将树视图中的符号作为其编译的子项(默认) 单位文件(例如,_NumAllocs.c FS_Core定义)
I. 字母模式,按字母顺序显示所有符号
II. 选择数组,虽然完整的数组不能进行采样,但阵列可以,采样受支持基类型的元素。为了取样特定的数组元素,数字可以填写相应的字段(IIa)。用户通过按 Enter 确认输入后,可选行将添加到对话框 (IIb)
III. 在"添加符号"中列出支持的基本符号的选型,并加上复选框类型 列。符号可以添加到采样符号列表中启用复选框。
IIlI. 特定结构的结构成员的选择可以通过单击 -结构 名称旁边的"+"成员。
V. 搜索 提供不区分大小写搜索。不能是 s- 的符号搜索结果中不显示 lected。结构显示为长名称或至少一个成员的名称包含搜索字符串。用户可以右键单击一个符号,以显示单击的符号的所有子项,即使它们与搜索字符串不匹配。
主体窗口
I. 工具栏
Il. 指示器栏
Ill. 图例
lV. 图形区域
V. 符号监视
Vl.状态栏
工具栏
I. 打开项目设置
Il. 显示/隐藏图形 |显示/隐藏手表窗口
lll. 开始采样 |停止采样 |暂停/恢复采样
lV. 放大 |缩小
V. 上升沿上的设置/未设置触发器 |落边 |任何边缘
Vl. 启动目标 |停止目标 |重置目标
目标指示栏
I. 在缩放目标指示器位置显示时间(HSS 模式/带时间戳的 RTT 模式)或采样 num-ber(没有时间戳的 RTT 模式)
lI. 显示 ZTI 和垂直中心线之间的时间/样本编号差异
图例
I.显示每个符号的颜色、数字、名称、Y 分辨率和 Y 偏移。
lI. 图例可以独立于主窗口移动。如果移动主窗口,图例将捕捉到图形区域的右上角。
图形区域
绘制图形的区域。该区域被划分为 100x100 像素(细灰色线,例如 I)。
启动时,区域高 800 像素,宽 1000 像素。顶部 (IIa) 的第 4 行和右侧 (IIb) 的第 5 行称为中心线,每 20 像素有很少的标记。
它们的位置与窗口大小无关。在图形区域 (III) 的左侧,每个符号的基准线由对应于符号编号的标签指示。如果触发器被激活,将显示一个名为"T"的特殊符号,表示触发器级别。如果触发器处于活动状态,则图形的移动方式为触发器事件位于 ZTI 位置 (IV)。
符号的基准线以及触发级别和 ZTI 可以通过移动相应的标签(抓取和移动)来更改。
符号表
I. 符号名称根据提供的 .elf 文件 (HSS 模式) 或 “符号号 n” (RTT 模式)。前面有一个右对标(显示符号)或一个"X"(符号是隐藏的)
Il. 根据 .elf 文件(仅 HSS 模式)的符号地址
lll. 表示符号的图形颜色
lV. 符号的内存大小
V. 符号的可变类型
Vl. 采样的最当前值
Vll. 最小值
Vlll. 最大值
lX. 样本数据的移动平均数
X. 垂直分辨率
Xl. 垂直偏移到中心线
上下文菜单
在符号的上下文菜单中,可以更改符号的可视外观:
类型 | 支持大小 |
---|---|
Color | 打开颜色选择的对话框 |
Show | 显示/隐藏符号 |
AC coupling | 交流耦合去除直流偏置 |
Move up | 将符号向上移动符号表中的一个位置 |
Move down | 将符号向下移动符号表中的一个位置 |
Y-Offset up | 增加 Y 偏移(向上移动符号) |
Y-Offset down | 减少 Y 偏移(向下移动符号) |
Y-Resolution up | 增加垂直分辨率 |
Y-Resolution down | 将降低垂直分辨率 |
Draw Line | 绘制符号的图形为线 |
Draw Points | 将符号的图形绘制为点 |
Draw Line & Points | 将符号的图形绘制为直线和点 |
Remove Symbol | 删除符号(不适用于 RTT) |
Add Symbols | 添加符号 打开用于选择新符号的符号选择对话框(不适用于 RTT) |
状态栏
I. 显示最新状态消息
ll. 指示状态(开/关)、类型(RTT/HSS) 和当前采样速度。括号中的值是配置的采样速度,可能与实际采样速度不同。
lll. 显示当前缓冲区大小、在缓冲区中拟合的最大采样数据包数以及缓冲区的当前占用量(以百分比表示)
触发功能
当在监视窗口中选择要触发的所需符号时,可以通过单击工具栏上的适当符号来激活触发。当触发模式处于活动状态时,数据会像不触发一样连续采样。如果发生触发器事件,则移动图形的可见部分。
当触发处于活动状态时,可以通过移动图形窗口左侧的触发器标签来调整触发级别。
J-Scope说明
• 示例缓冲区的作用就像圆形缓冲区。如果缓冲区已满,则每个新条目将覆盖最早的数据。
• 如果暂停采样,目标也不会停止,HSS/RTT 也不会暂停,但所有传入的采样都将被丢弃,直到采样恢复。
• 如果在 RTT 模式下未提供时间戳,J-Scope 将按到达顺序对传入数据包进行编号。因此,所有基于时间的值都将显示为基于数字的值。
• J-Scope 使用指数平滑计算信号的直流偏置。在"交流耦合"模式下,图形由此值移动,而采样的数据不更改。计算使用以下公式完成,其中 alpha 设置为 0.0001:
J-Scope限制
SEGGER网站上提供了有关J-Link功能的信息。HSS对变量数量和采样速度的限制在SEGGER J-Scope网页(部分模型比较)中有说明。
有关速度限制的信息取决于J-Link模型、调试接口速度和RTT缓冲区大小,可在SEGGER RTT网页(部分性能)上找到。
主机PC的操作系统或USB实现可能会造成进一步的限制。带有以太网连接的J-Link调试探针可与J-Scope一起使用,以便达到超出USB限制的速度。
RTT:应用程序
准备
首先,SEGGER RTT需要包含在目标应用程序中。
在RTT模式下,所有数据都由目标应用程序直接提供。如果需要时间戳,目标应用程序负责数据完整性并提供可靠的时基。
主要概念
目标应用程序给出了采样数据及其格式。
这种数据格式通过命名RTT通道向J-Scope公布。命名规则如下所述。
一旦目标应用程序收集了数据包所需的所有数据,它就会使用SEGGER_RTT_Write()将该数据包写入RTT通道。
RTT通道命名约定
J-Scope搜索第一个名为JScope_FORMAT的RTT通道,其中FORMAT定义目标应用程序写入缓冲区的数据的格式。
•所有变量标识符由类型标识符和大小指示(字节)组成。
•数据包中的数据必须与格式中声明的顺序相同。
•如果提供了时间戳,则需要将其声明为第一个变量。
类型 | 支持大小 | 注意 |
---|---|---|
t | 4 | 指示每个数据包前面都有一个32位的值包含以µs为单位的时间戳 |
b | 1 | 指定布尔值 |
f | 4,8 | 指定32位或64位浮点值 |
i | 1,2,4 | 指定有符号的8、16或32位值 |
u | 1,2,4 | 指定无符号8、16或32位值 |
命名示例
JScope_t4u1i4指定数据包以32位时间值开头,后跟无符号字符和有符号整数
JScope_4i1指定数据包包含无符号int,后跟有符号字符
工作流示例
•用户希望对有符号int、unsigned int和signed char进行采样
•用户希望提供时间戳。
•因此,RTT信道被命名为JScope_t4i4u4i1
•根据使用情况,例如在计时器或条件下进行采样
案例一
•在本例中,用户决定每100µs采样一次
•用户添加一个基于时间的中断,每100µs发生一次。各个ISR收集必要的数据和当前时间戳。
•之后,ISR调用SEGGER_RTT_Write()
案例二
•在另一个用例中,用户可以决定在调用特定函数后进行采样。
•用户向该函数添加子函数调用。子函数准备可以作为参数传递或在全局范围内可用的数据,并使用SEGGER_RTT_Write()将其写入RTT缓冲区。
RTT模式下的策略
•RTT通道名称和数据格式不得在采样会话期间更改。
•RTT通道名称和数据格式可在采样会话之间更改(无需重新启动J-Scope)。
•RTT信道名称必须根据数据格式进行相应设置。
•只有符合RTT通道名称声明的数据格式的完整数据包才能写入RTT通道。
•RTT数据包必须按顺序发送。
•RTT模式应为NO_BLOCK_SKIP或BLOCK_IF_FIFO_FULL。
附录一
JScope_V611m 网盘链接:https://pan.baidu.com/s/1CyrirUY9m8vj_I_kbpqYPA
提取码:d7bj
/*********************************************************************
*
* SEGGER_RTT_Write
*
* Function description
* Stores a specified number of characters in SEGGER RTT
* control block which is then read by the host.
*
* Parameters
* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal").
* pBuffer Pointer to character array. Does not need to point to a \0 terminated string.
* NumBytes Number of bytes to be stored in the SEGGER RTT control block.
*
* Return value
* Number of bytes which have been stored in the "Up"-buffer.
*
* Notes
* (1) If there is not enough space in the "Up"-buffer, remaining characters of pBuffer are dropped.
*/
unsigned SEGGER_RTT_Write(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) {
unsigned Status;
volatile unsigned SavedState;
//
INIT();
SEGGER_RTT_LOCK(SavedState);
//
// Call the non-locking write function
//
Status = SEGGER_RTT_WriteNoLock(BufferIndex, pBuffer, NumBytes);
//
// Finish up.
//
SEGGER_RTT_UNLOCK(SavedState);
//
return Status;
}
Example Code RTT函数包下载:https://download.csdn.net/download/qq_40696002/12692812