章节4 使用SystemView进行记录 - Segger SystemView使用手册(译文)

本文博客链接:http://blog.csdn.net/bjr2016,作者:bjr2016,未经允许不得转载.

章节4 使用SystemView进行记录


本节描述了如何使用SystemView程序进行连续的记录,和如何使用调试器手动进行单次记录。

4.1 连续录制

基于J-Link调试探针技术和SEGGER实时传输技术(RTT),SystemView可以在目标程序运行时实时地记录目标执行情况。RTT需要在程序执行过程中通过调试接口读取内存的能力。这特指包括ARM Cortex-M0、M0 +、M1、M3、M4和M7处理器以及所有的Renesas RX设备。
这里写图片描述
SystemView使用J-Link是如何工作的

开始录制
要使用SystemView开始记录,首先需要连接J-Link和目标板,并单击Target->Start Recording。

输入或者选择设备名。下拉列表会列举最近使用的设备。如果当前设备不是列表的一部分,可以手动输入。可以在 https://www.segger.com/jlink_supported_devices.html 查看支持的设备名。

注意

对于RTT控制块自动检测,以及对于某些设备来说,准确的设备必须是已知的。建议不要仅仅选择一个核心。(brj2016注:比如只选Cortex-m0,而不选择具体的芯片名)。

如果连接到一个特定的J-Link或者一个通过TCP / IP连接的J-Link时,需要配置J-Link连接。

选择连接目标设备的接口和接口速度。

配置RTT控制块检测。在大多数情况下可以使用自动检测。如果RTT控制块不能被检测到,则选择一个RTT控制块的搜索范围,或者直接输入准确的地址。

单击 OK 来连接到目标设备并开始录制。

注意

SystemView可以与调试器同时使用。在这种情况下,正在进行调试时可以同时进行记录。确保在调试器中完成了所有必需的配置。当调试器停止时,SystemView记录也会停止。

SystemView会连续地从目标板读取数据,并在运行时更新窗口。

停止录制

要停止录制,选择 Target->Stop Recording。

免费版本的SystemView只能录制1 000 000个事件,之后会自动停止。

4.2 Single-shot录制

这里的Single-shot是指 只录制一个事件的意思,而不是单次录制直到停止录制

当目标设备不支持RTT或没有使用J-Link时,SEGGER SystemView可以用于记录数据,直到其目标缓冲区被填充满。

在Single-shot模式下,在应用程序中手动启动录制,只允许录制特定的感兴趣的部分。

由于通常的应用程序每秒可以生成大约5到15个kByte的记录数据,而在100%负载时能达到更高的速率,甚至内部RAM中的一个小缓冲区也可以用于记录关键部分的分析数据。当使用外部RAM SystemView时,即使是在Single-shot模式下也可以记录很长时间。
这里写图片描述
在Single-shot模式下SystemView如何工作

从系统中获取single-shot数据

要获取录制在single-shot模式下的数据,必须通过SystemView程序或外部调试器读取SystemView缓冲区。

  • 连接调试器,并加载目标板应用程序
  • 使用函数 SEGGER_SYSVIEW_Conf() 或者 SEGGER_SYSVIEW_Init() 配置并初始化SystemView。
  • 在应用程序中需要被分析的地方使用函数 SEGGER_SYSVIEW_Start() 启动录制。

SystemView可以使用J-Link从目标板自动读取single-shot数据。

  • 启动SystemView程序,并选择 Target->Read Recorded Data。

在没有J-Link或者没有SystemView的情况下,可以通过下列步骤读取数据:

  • 在缓冲区满了或者录制完成后,在调试器中暂停应用程序。
  • 得到SystemView RTT缓冲区地址和已使用字节数。(正常是 _SEGGER_RTT.aUp[1].pBuffer和_SEGGER_RTT.aUp[1].WrOff 两个参数)
  • 从缓冲区取出已使用字节数个数的字节,保存成后缀名为 .SVDat的文件。
  • 使用SystemView程序打开这个文件。

为了能够录制不止一次,缓冲写入偏移量(_SEGGER_RTT.aUp[1]. WrOff)可以在读取数据时设置为0。为了防止发生SystemView溢出事件,应该在缓冲区填满且不能保存下一个SystemView事件时停止应用程序。

4.3 事后分析 Post-mortem

Post-mortem分析和single-shot很像,但有一个区别:SystemView事件会被连续地记录下来,而SystemView缓冲区会在缓冲区填满时覆盖旧的事件。在读取缓冲区时,可以读取到最新的事件。

当系统运行很长时间并突然崩溃时,Post-mortem分析会很有用。在这种情况下,可以从目标板读取读取SystemView缓冲区,SystemView程序可以显示系统在崩溃前发生的情况。

注意

使用Post-mortem分析,调试器必须连接在目标设备上。(不需要复位设备或者修改RAM)。

为了得到尽可能多的有用数据,建议给SystemView配置一个大的缓冲区(大于等于8k字节)。外部RAM可以用作SystemView缓冲区。
为了配置目标系统为Post-mortem模式,请参阅第59页的章节目标配置中的 SEGGER_SYSVIEW_POST_MORTEM_MODE 和 SEGGER_SYSVIEW_SYNC_PERIOD_SHIFT 。

从系统中获得Post-mortem数据

要获取在Post-mortem模式中记录的数据,必须通过SystemView应用程序或外部调试器读取SystemView缓冲区。

  • 使用函数 SEGGER_SYSVIEW_Conf() 或者 SEGGER_SYSVIEW_Init() 配置并初始化SystemView。
  • 在应用程序中应该被分析的地方启动录制。
  • 连接调试器,加载目标应用程序,并让系统跑起来。

使用J-Link,SystemView程序可以自动从目标板读取post-mortem数据。

  • 启动SystemView,并选择Target->Read Recorded Data。

在没有J-Link或者没有SystemView的情况下,可以通过下列步骤读取数据:

  • 在缓冲区满了或者录制完成后,在调试器中暂停应用程序。
  • 得到SystemView RTT缓冲区地址和已使用字节数。(正常是 _SEGGER_RTT.aUp[1].pBuffer和_SEGGER_RTT.aUp[1].WrOff 两个参数)
  • 从缓冲区取出已使用字节数个数的字节,保存成后缀名为 .SVDat的文件。
  • 使用SystemView程序打开这个文件。

SystemView可以使用J-Link从目标板自动读取single-shot数据。

  • 启动SystemView程序,并选择 Target->Read Recorded Data。

在没有J-Link或者没有SystemView的情况下,可以通过下列步骤读取数据:

由于SystemView缓冲区是一个环形缓冲区,因此数据可能需要在两个块中读取,以便在开始时开始读取数据,并尽可能多地保存数据

  • 在应用程序中配置和初始化SystemView,使用函数SEGGER_SYSVIEW_Conf() 和SEGGER_SYSVIEW_Init。
  • 在应用程序应该被分析的地方启动录制。
  • 连接目标板和调试器,下载目标板应用程序,并启动。
  • 当系统崩溃或所有测试完成时,使用调试器停止系统。
  • 得到SystemView RTT缓冲区(通常是_SEGGER_RTT.aUp[1].pBuffer)。
  • 将pBuffer + WrOff 直到缓冲区末尾的数据保存到一个文件。
  • 将从pBuffer到pBuffer + RdOff - 1的数据追加到文件中。
  • 将这个文件保存成 .SVdat 或者 .bin。
  • 使用SystemView程序打开这个文件。

4.4 保存和加载记录

当停止记录时,可以将记录的数据保存到文件中,以便稍后进行分析和文档化。选择 File->Save Data。记录属性对话框弹出,允许保存标题、作者和数据文件的描述。单击OK。选择保存目录并单击Save。
可以通过File->Load Data打开已保存的数据。也可以通过File->Recent菜单看到最近使用的数据文件。SystemView程序可以打开.bin和。SVDat 文件。

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
移植 SystemView 到 FreeRTOS 上需要进行以下几个步骤: 1. 下载 SystemView 的安装文件并解压缩。 2. 在 FreeRTOS 的配置文件中打开 trace 配置选项(`configUSE_TRACE_FACILITY`),并设置 SystemView 的输出端口(`configUART_PRINTF`)。 3. 在 FreeRTOS 中包含 SystemView 的头文件和源文件,并初始化 SystemView。 4. 在 FreeRTOS 的任务中使用 SystemView 的 API 函数进行事件跟踪。 下面是一个简单的示例代码,展示了如何在 FreeRTOS 中使用 SystemView 进行事件跟踪: ```c #include "FreeRTOS.h" #include "task.h" #include "SEGGER_SYSVIEW.h" void Task1(void *pvParameters) { SEGGER_SYSVIEW_TASKINFO task_info; // Get task information task_info.pTaskName = "Task1"; // Register task with SystemView SEGGER_SYSVIEW_SendTaskInfo(&task_info, 0); while (1) { // Perform task operations vTaskDelay(100); SEGGER_SYSVIEW_SendTaskState(SEGGER_SYSVIEW_TASK_STATE_READY); // ... } } int main(void) { // Initialize SystemView SEGGER_SYSVIEW_Conf(); SEGGER_SYSVIEW_Start(); // Create tasks xTaskCreate(Task1, "Task1", configMINIMAL_STACK_SIZE, NULL, 1, NULL); // Start FreeRTOS scheduler vTaskStartScheduler(); return 0; } ``` 在上面的示例代码中,`Task1` 是一个简单的任务函数,在任务中使用了 SystemView 的 API 函数进行事件跟踪。在 `main` 函数中,首先初始化了 SystemView,并创建了任务。最后启动了 FreeRTOS 调度器。 使用 SystemView 可以帮助我们更好地理解和调试 FreeRTOS 的运行情况,进而提高系统的效率和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值