当前位置:网站首页>B_QuRT_User_Guide(38)

B_QuRT_User_Guide(38)

2022-07-07 21:52:00 weixin_38498942

24 Performance Monitor

线程使用性能监控器在用户程序执行期间实时测量代码性能。
性能监控单元(PMU)是Hexagon处理器的一个硬件功能。它是通过访问一组专用的处理器寄存器来控制的。
性能监测器在QuRT中通过以下操作进行控制。- qurt_pmu_enable()

  • qurt_pmu_get()
  • qurt_pmu_set()
  • Macros

24.1 qurt_pmu_enable()

24.1.1 功能文档

24.1.1.1 void qurt_pmu_enable ( int enable )

启用或禁用Hexagon处理器性能监控单元(PMU)。默认情况下,剖析功能是禁用的。
默认情况下禁用。
注意:启用剖析并不自动重置计数寄存器–必须在开始事件计数之前明确进行。

参数
在这里插入图片描述
返回值
None.

依赖项
None.

24.2 qurt_pmu_get()

24.2.1 功能文档

24.2.1.1 unsigned int qurt_pmu_get ( int reg_id )

获取PMU寄存器。
返回指定PMU寄存器的当前值。

参数
在这里插入图片描述
返回值
Integer - 指定PMU寄存器的当前值。
依赖项
None.

24.3 qurt_pmu_set()

24.3.1 功能文档

24.3.1.1 void qurt_pmu_set ( int reg_id, unsigned int reg_value )

设置指定的PMU寄存器的值。
注意:设置PMUEVTCFG会自动清除PMU寄存器PMUCNT0到PMUCNT3。
参数
在这里插入图片描述
返回值
None.

依赖项
None.

25 Error Results

QuRT函数以两种方式之一返回错误结果。

  • 作为函数的结果值
  • 作为传递给用户定义的异常处理程序的值
    QuRT为错误结果值定义了一组标准符号。本节列出了这些符号和它们相应的值。

26 Function Tracing

QuRT支持函数追踪以协助调试程序。- qurt_trace_changed()

  • qurt_trace_get_marker()
  • qurt_etm_set_pc_range()
  • qurt_etm_set_atb()
  • qurt_stm_trace_set_config() - 数据类型
  • 宏指令

26.1 qurt_trace_changed()

26.1.1 功能文档

26.1.1.1 int qurt_trace_changed ( unsigned int prev_trace_marker, unsigned int trace_mask )

确定特定的内核事件是否已经发生。
返回一个值,表示自从获得指定的内核跟踪标记后,指定的内核事件是否被记录在内核跟踪缓冲区中。
prev_trace_marker参数指定的是通过调用qurt_trace_get_marker()获得的内核跟踪标记。
注意。
与qurt_trace_get_marker()一起使用,该函数确定某些内核事件是否发生在一个代码块中。
这个函数不能确定特定的内核事件类型是否已经发生,除非该事件类型在系统配置文件的trace_mask元素中被启用。
QuRT只支持记录中断和上下文切换事件(如trace_mask值为0x3)。
参数
在这里插入图片描述
返回值
1 - 自从获得指定的跟踪标记以来,已经发生了指定类型的内核事件。
0 - 自从获得指定的跟踪标记后,没有发生指定类型的内核事件。

依赖项
None.

26.2 qurt_trace_get_marker()

26.2.1 功能文档

26.2.1.1 unsigned int qurt_trace_get_marker ( void )

获取内核跟踪标记。
返回内核跟踪标记的当前值。该标记由一个硬件线程标识符和内核跟踪缓冲区的索引组成。跟踪缓冲区记录了各种内核事件。
注意:将此函数与qurt_trace_changed()一起使用可以确定某些内核事件是否发生在一个代码块中。
返回值
Integer - 内核跟踪标记。
依赖项
None.

26.3 qurt_etm_set_pc_range()

26.3.1 功能文档

26.3.1.1 unsigned int qurt_etm_set_pc_range ( unsigned int range_num, unsigned int low_addr, unsigned int high_addr )

设置用于ETM过滤的PC地址范围。根据Hexagon核心设计,最多可支持四个PC范围。
参数
在这里插入图片描述
返回值
QURT_ETM_SETUP_OK - 成功。
QURT_ETM_SETUP_ERR - 失败。
依赖项
None.

26.4 qurt_etm_set_atb()

26.4.1 功能文档

26.4.1.1 unsigned int qurt_etm_set_atb ( unsigned int flag )

设置ATB总线的状态,以通知QuRT ATB总线被主动启用或禁用。QuRT执行
在低功率管理下执行相应的动作。
参数
在这里插入图片描述
返回值
QURT_ETM_SETUP_OK - 成功。
QURT_ETM_SETUP_ERR - 失败
依赖项
None.

26.5 qurt_stm_trace_set_config()

26.5.1 功能文档

26.5.1.1 unsigned int qurt_stm_trace_set_config ( qurt_stm_trace_info_t ∗ stm_config_info )

设置一个STM端口用于追踪事件。
参数
在这里插入图片描述
返回值
QURT_EOK - 成功。
QURT_EINVALID - 失败;可能是因为通过的端口地址不在页面表中。

依赖项
None.

26.6 Data Types

本节介绍了函数追踪服务的数据类型。

26.6.1 Data Structure Documentation

26.6.1.1 struct qurt_stm_trace_info_t

26.7 Macros

STM跟踪信息。

26.7.1 Define Documentation 26.7.1.1 #define QURT_ETM_SETUP_OK 0

ETM setup OK.

26.7.1.2 #define QURT_ETM_SETUP_ERR 1

ETM setup error.

26.7.1.3

ATB off.

26.7.1.4

ATB on.

26.7.1.5 #define QURT_TRACE( str, … ) VA_ARGS

函数追踪是通过一个调试宏(QURT_TRACE)实现的,它可以选择生成printf
语句,在每个作为宏参数传递的函数调用之前和之后都会产生。例如,源代码中的以下宏调用:

 QURT_TRACE(myfunc, my_func(33))

产生以下调试输出:


       myfile:nnn: my_func >>> calling my_func(33)
       myfile:nnn: my_func >>> returned my_func(33)

调试输出包括函数调用的源文件和行号,以及调用本身的文本。编译客户源文件时,对其文件名定义了-D FILENAME
调试输出是使用库中的函数qurt_printf生成的。符号QURT_DEBUG控制调试输出的生成。如果没有定义这个符号,就不会生成函数跟踪。
注意:调试宏是通过QuRT API头文件访问的。

原网站

版权声明
本文为[weixin_38498942]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_38498942/article/details/125656549