【发布时间】:2015-07-12 09:51:36
【问题描述】:
我想要做的是尝试在 Raspberry pi 1(ARMv6) 中运行一个短代码,并获取它所花费的时钟周期数。所以我必须读取CP15 c15中的循环计数器寄存器。在文档(ARM11->ARM1176->ARM1176JZF-S Technical Reference Manual->System Control Coprocessor->System control processor registers->c15, Cycle Counter Register)中说我需要先访问用户模式。但我不知道该怎么做。
在 Raspberry pi 2(ARMv7) 中,我知道这可以通过以下代码的内核模块来完成:
/* enable user-mode access */
asm ("MCR p15, 0, %0, C9, C14, 0\n\t" :: "r"(1));
但是由于ARMv6和ARMv7的寄存器不同,我不知道如何为Raspberry 1编写汇编程序。直到现在我在手册中都找不到有关此的任何信息。有人知道怎么做吗?
顺便说一句,我的目的只是获得运行代码的时钟周期。如果有人知道其他方法,我也很高兴看到。谢谢!
【问题讨论】:
-
呃,你指的准确的文字是“在用户模式下访问循环计数器寄存器取决于V位,见c15, Secure User and Non-secure Access Validation Control Register”,你没有点击交叉引用链接吗? (注意它只是安全的)无论如何,使用
perf几乎肯定比暴露一个原始的全局计数器来尝试测量单个任务要好,除非你明白为什么该任务有时需要数万个周期才能运行,并且您对极其不准确的数据感到满意。
标签: arm raspberry-pi clock armv6