RCSN嵌入式

文章数:46 被阅读:160721

账号入驻

[先楫RT-Thread BSP的misc系列] systemview可视化RTOS调试

最新更新时间:2024-05-02
    阅读数:


一 前言


五一劳动节快乐!!!


先楫在2024年4月底发布了RT-Thread BSP v1.5.0版本,传送门如下:

RT-Thread BSP v1.5.0 发布 | 优化生态


先楫对于RT-Thread BSP目录结构相对清晰,可以在rtthread studio下载相关board的bsp,本文主要下载阐述HPM6800EVK的bsp,在rtthread studio下载好之后,可以在该软件的安装目录下的repo找到bsp包,如下:


在BSP v1.5.0上新增一个比较大的更新就是加入了misc,在common下的misc目录,目前包含了主要三个项目,目前主要支持 RTOS可视化调试进、RTOS中的中断向量模式和可抢占中断支持。


misc全称Miscellaneous(杂项),正如字面意思,用来描述不便于归类到特定类别中的元素、组件或配置,不直接属于系统的主要功能模块,但又不可或缺,如配置参数、辅助调试工具等用途。

对于systemview在riscv平台的使用,特别是在RT-Thread平台下,在以往的文章中已经做了大概的移植工作阐述,传送门如下:

[hpm_application] RT-Thread应用执行可视化分析:SystemView来啦!


刚好先楫在BSP V1.5.0支持了该组件,在发布的时候也体验了一把,把相关的使用的经验进行阐述,对于官方的移植思路不在本文的阐述范围内,可自行配合上述文章和官方的代码进行分析,特别是中断处理上,会在后续的文章中补充阐述。


效果:


二、操作流程

主要操作常用的配置,其他配置应用可参考segger的systemview手册。


(一)新建工程


可以在BSPv1.5.0中新建任意一个示例,本文以以太网示例ethernet_demo为例子,需要注意的是,systemview属于segger的产品,需要配合Jlink进行调试,所以调试器最好选择jlink。


(二)menuconfig配置


在官方例子中,systemview默认关闭,需要开发者自行根据需求打开。在rtthread studio的setting的位置如下:


对应的env的menuconfig位置如下:


在systemview文件夹中也提供了README.md文档进行简单的使用介绍,本文也是基于该readme进行操作使用。


1、使能segger systemview


如上图所示,如果需要使用systemview,需要开发者自行使能,使能后会出现以下配置也自动使能


2、systemview RTT section


Systemview依赖Jlink的RTT模块,故除了需要设置systemview的section,还需要设置RTT模块的section,官方默认都是放在nocache上,以便数据受cache影响,加之systemview内部并没有提供cache操作的api注册,建议使用官方原本的sction配置


3、MCU相关参数配置


主要是设置应用程序的名字(App name)、device name(jlink支持的设备)、Timestap freq(时间戳频率)、cpu freq(cpu 频率)、system description(系统描述符)。


(1)CPU device config


官方默认使用的是HPM6750xVMx。

而对于其他的先楫型号,可以在jlink的device list查找,当然也可以在应用程序J-flash中查找。

传送门: https://www.segger.com/supported-devices/hpmicro/


对于本文使用的HPM6800EVK板子,使用的MCU是HPM6880IBD1,对应的Jlink的device name是HPM6880xBDx


(2)frequency config


systemview使用的时间戳是CPU的cycle,而频率刚好是CPU的频率。都为500MHz。


(3)system description 0~2


系统描述符,主要描述中断名称,格式为“I#num=name”,num是中断标号,name是中断名称。

比如上述的mchtmr,中断标号在这里是2055。本文实例是以太网,可以起个以太网中断,在um手册中可知,ENET0的中断编号是92


如此以来,HPM6800EVK的配置信息如下:


4、segger RTT config


主要配置RTT模块的通道数量、输入输出通道的字节数等。保持默认即可,通道数量可以设置为3,systemview使用的通道是2,而通道0是作为rtthread的串口设备使用。


5、systemview buffer config


主要配置systermview使用的RTT模块通道和Buffer大小,这里的Buffer大小默认是2048,如果追踪的需求比较大,比如开启rtthread的相关对象信息跟踪,而且多个线程调度,需要进行加大调整。本文例子使用的是以太网,会开启iperf,加之ram空间足够,这里设置为100K大小,也就是102400


6、systemview rtthread hook register


rtthread提供了系统和中断的钩子函数,systemview在钩子函数中进行获取相关信息进行发送从而起到跟踪作用。


而systemview组件也开放了不同hook的注册,监视内核对象和中断情况。这里使用组件默认即可。


三、上位机systemview验证

(一)准备工作

1、修改参数完毕后,保存配置编译,然后烧录。

2、 在segger官网下载systemview软件,版本可最新。

https://www.segger.com/downloads/systemview

3、 将工程中的

libraries\misc\systemview\SystemView_Description\SYSVIEW_RTThread.txt' 复制到systemview安装目录下的Description文件夹


(二)配置


1、查看MCU端打印的log信息,需要记住两个信息,一个是cpu频率,一个是RTT模块的buffer地址。


2、打开systemview软件,选择target中的recorder configuartion


3、弹出的窗口选择默认:J-Link.


4、target connection选择对应板子的soc型号,在上述中可知SOC为HPM6880xBDx, RTT Control Block Detection中选择上述的log信息的address,配置完毕后选择OK


5、点击 左上角提示的recording start按钮,即可开始录制记录


(三)分析系统信息


1、system


(1)主要记录目标MCU的信息,比如SOC型号、SOC频率、时间戳周期频率


(2)recording记录运行的时间,事件发生的次数和频率,发生Overflow Buffer溢出的次数。


(3)analysis主要记录已捕获的大小,峰值吞吐量,解析速度。


(4)记录线程的数量,切换次数和时间。中断的数量,发生的次数。


2、events timeline


主要记录每个事件的序号、发生的时间戳、事件的上下文、事件名称、具体事件。


以例子中的 led_th线程为例。线程中会以500ms闪烁LED灯


(1) 在systemview中可看到从上一个led闪烁到下一个闪烁间隔刚好就是500ms。773-272=501ms.


(2) 先来分析下调度进来led_th的前后分析


在这一时刻发生了mchtmr定时器中断,而bsp的rtthread的时钟节拍就是以mchtmr定时的。


进来定时器中断后,会使用rt_tick_increase API时下按时间片轮转调度。


也就是图中的6.9us,在时间片调度到led_th大概花了6.9us。而调度到led_th花了4.3us.


进而就是led_th的task run,也就是执行点灯的事件,花了3.6us后,进而使用delay后让出调度器。


(3)cpu负载率

这里还可以查看cpu的负载分布

更多信息分析可以查看segger的systemview手册。


四、总结

1、先楫适配systemview组件,能够帮助开发者深入理解先楫MCU在rtthread运行的相关行为以及分析运行时的数据,包括任务调度、中断活动、系统事件等,通过查看运行消耗的时间,提升排错效率以及性能。



 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: TI培训

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved