SystemView简单移植

HarderHeng Lv5

一、SystemView是什么

SystemView是由SEGGER公司开发的嵌入式系统可视化分析工具,可以用来可视化的监控嵌入式操作系统的运行,帮助我们更好的学习和开发嵌入式操作系统。

SystemView支持uC/OS-II、μC/OS-III、FreeRTOS、embOS和无OS的裸机系统。

SystemView可以使用串口、J-Link等连接方式和硬件进行连接。

二、SystemView工作模式介绍

持续记录模式:基于J-Link调试器和SEGGER实时传输技术(RTT),SystemView可以在目标程序运行时实时地记录目标执行情况,不使用J-Link RTT技术,也可以通过串口或者TCP/IP实现。

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

Post-Mortem模式:类似Single-Shot模式,但会在缓冲区填满时覆盖旧的事件,所以,记录到的是最新的系统活动事件。这个模式可用于分析某些应用突然崩溃的问题,SystemView可以显示系统崩溃前发生的情况。

在这里我们一般都是用持续记录模式,所以并不会做深入的介绍

image-20240514174143934

三、SystemView工作目录

image-20240509103612862

我们创建了一个SystemView文件夹,里面是Config和Src文件。

image-20240512181718276

在keil中是这样的文件夹目录,因为keil不支持多级目录。

在SEGGER提供给我们的SystemView的Src文件夹中有这些内容。

其中

Config文件夹中的是一些RTT实时传输和SystemView的配置。

Sample文件夹中的是一些可用的操作系统的接口文件,需要我们找到需要的接口文件。

SEGGER文件夹中的就是SystemView和RTT的源文件,不需要我们修改,直接放进工程目录中。

四、配置SystemView和RTT以及开启系统追踪功能

  • os_cfg.h

在os_cfg.h中找到宏OS_TRACE_EN并将其值改为1,也就是打开系统追踪功能。

OS_TRACE_API_ENTER_ENOS_TRACE_API_EXIT_EN是系统API调用的监控。

  • os_trace.h

要启用系统追踪功能需要将这个头文件包含进去。

在我们的项目中,可以看到这个头文件包含在ucos_ii.h中。

  • os_cfg_trace.h

配置宏OS_CFG_TRACE_MAX_TASKOS_CFG_TRACE_MAX_RESOURCES表示可以监控的任务和其他内核对象的最大数量。

  • SEGGER_RTT_Conf.h

BUFFER_SIZE_UP表示缓冲区最大值,给4096

  • SEGGER_SYSVIEW_Conf.h

在这里我没找到SEGGER_SYSVIEW_RTT_BUFFER_SIZE这个定义的宏,所就自己定义了一个。

#define SEGGER_SYSVIEW_RTT_BUFFER_SIZE 4096u

也是定义buffer缓冲区的大小。

  • SEGGER_SYSVIEW_Config_uCOSII.c

在这里需要更改两个宏函数SYSVIEW_TIMESTAMP_FREQSYSVIEW_CPU_FREQ,这两个宏会被下面的函数SEGGER_SYSVIEW_Conf所调用,所以我们需要让这两个宏的值是SYSCLK的值。利用RCC库中的RCC_GetClocksFreq函数来获取时钟频率。

SYSVIEW_RAM_BASE宏定义表示着缓冲区的最低地址,应该不需要更改。

1
2
3
4
5
6
7
8
9
int SYSCLK_FreqGet(){
RCC_ClocksTypeDef get_rcc_clock;
RCC_GetClocksFreq(&get_rcc_clock);
return get_rcc_clock.SYSCLK_Frequency;
}

#define SYSVIEW_TIMESTAMP_FREQ (SYSCLK_FreqGet())
#define SYSVIEW_CPU_FREQ (SYSCLK_FreqGet())
#define SYSVIEW_RAM_BASE (0x20000000)

再往下是中断信息的输出函数,在这里进行输出的更改,在SystemView中想看到具体的中断名称而不仅仅是中断号,就可以在这里进行配置。

SEGGER_SYSVIEW_SendSysDesc("I#15=SysTick");

到这里为止,我们就对SystemView进行了基本的配置和移植。

参考文档:

Starting the Trace Recorder - µC/OS-II Documentation

五、启用SystemView进行追踪

在主程序中调用OS_TRACE_INIT()函数进行初始化。

注意,为了在SystemView的电脑软件中观察到具体的任务,请使用OSTaskNameSet为一个任务设定名称,否则在软件中只能看得到问号。

连接硬件配置

我们所使用的STM32F401RE-NUCLEO开发版有板载的ST-Link,SEGGER官方提供了一个ST-LINK Reflash 工具,可以用来把ST-Link变成J-Link来用。跟着其中的教程一步步走,先安装两种Link的驱动,再使用软件将ST-Link变成J-Link。这时候发现J-Link不能直接给板子供电,必须要外接一个供电设备比如另外一个ST-Link。

软件配置

打开SystemView软件,在Target中可以看到Record Configuration,在这里选择J-Link并且自己选择好设备类型,之后就可以开始记录了。

  • Title: SystemView简单移植
  • Author: HarderHeng
  • Created at : 2024-05-08 21:39:17
  • Updated at : 2024-05-15 17:00:29
  • Link: https://harderheng.life/2024/05/08/SystemView简单移植/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments