gpt4 book ai didi

c - Arm Cortex A8 上的分析

转载 作者:行者123 更新时间:2023-11-30 17:53:32 25 4
gpt4 key购买 nike

我想在 ARM 处理器上对我的应用程序进行分析。我发现 oprofile 不起作用。几年前有人用下面的代码进行测试。循环计数器确实有效,性能监视器计数器仍然不起作用。我又测试了一遍,还是一样。对于以下代码,我得到周期计数:2109,性能监视器计数:0。我已经通过谷歌搜索,到目前为止,我还没有找到解决方案。有人解决了这个问题吗?

    uint32_t value = 0
uint32_t count = 0;
struct timeval tv;
struct timezone tz;

// enable all counters
__asm__ __volatile__ ("mcr p15, 0, %0, c9, c12, 1" ::"r" (0x8000000f));

// select counter 0,
__asm__ __volatile__("mcr p15, 0, %0, c9, c12, 5" ::"r" (0x0));
// select event
__asm__ __volatile__ ("mcr p15, 0, %0, c9, c13, 1" ::"r"(0x57));

// reset all counters to ero and enable all counters
__asm__ __volatile__ ("mrc p15, 0, %0, c9, c12, 0" : "=r" (value));
value |= 0xF;
__asm__ __volatile__ ("mcr p15, 0, %0, c9, c12, 0" :: "r" (value));

gettimeofday(&tv, &tz);

__asm__ __volatile__("mrc p15, 0, %0, c9, c13, 0" : "=r" (count));
printf("cycle count: %d", count);

__asm__ __volatile__ ("mrc P15, 0, %0, c9, c13, 2": "=r" (count));
printf("performance monitor count: %d", count);

最佳答案

我刚刚遇到了同样的问题,就我而言,这是由于 NIDENm 信号被拉低造成的。

来自 ARM 文档:

The PMU only counts events when non-invasive debug is enabled, that is, when either DBGENm or NIDENm inputs are asserted. The Cycle Count (PMCCNTR) Register is always enabled regardless of whether non-invasive debug is enabled, unless the DP bit of the PMCR register is set.

NIDENm 信号是 ARM 内核的输入,因此它的具体控制方式将取决于内核外部处理器的部分。就我而言,我发现了一个控制 NIDEN 的寄存器。在您的情况下,它可能是一个寄存器,或一个引脚,或者(可能)信号只是被拉低,您无法使用该功能。

同样来自 ARM 文档:

The values of the DBGENm and NIDENm signals can be determined by polling DBGDSCR[17:16], DBGDSCR[15:14], or the DBGAUTHSTATUS.

因此,如果您可以阅读其中之一,则可以确认问题是 NIDENm

关于c - Arm Cortex A8 上的分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15524138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com