我已经为PMCCNTR
正确地配置了PMU,以便在运行FreeRTOS的Cortex-R5上勾选。我将省略配置代码,因为它已经在许多其他StackOverflow问题上重复了。我相信配置是正确的,因为我尝试运行
__asm__ volatile("mrc p15, 0, %0, c9, c13, 0" : "=r"(pmccntr))
周期性地,我能够看到pmccntr
变量单调地增加,并在(2^32-1)之后翻滚。
CPU以800 1Hz运行,所以我希望如果我在1Hz任务中读取PMCCNTR
,我会注意到这个值会增加800 1Hz。然而,1Hz任务调用之间的PMCCNTR
差异更多地是7200万次。我还试着玩64分频器,以确保我的观察是正常的。
我的数学正确吗?或者我使用错误的数字作为CPU频率?什么是确定的方法来计算PMCCNTR
应该计数的频率?
更新:的根本原因是WFI @Sean指出
发布于 2019-06-27 09:26:39
只要计数器未被禁用且核心未处于调试状态,PMCCNTR就会在核心时钟运行。如果你计算72兆赫/1.125 MHz,那么你的核心很有可能运行在外部晶体频率上,而不是来自内部锁相环。
另一个可能的解释是,内核处于WFI状态,大部分时间时钟停止-在这种情况下,您测量的结果将受到操作系统所做工作量的影响。
https://stackoverflow.com/questions/56764455
复制相似问题