0

我正在“玩”rm48 板(Texas Instrument RM48L952,ARM CORTEX-R4F),我想为循环计时(例如)。

char message[20];
int temp=0;
time_t start, end, elapsed; 
sciInit();  

start = time(NULL);
  for(temp=0;temp<0xAAAAAAA;temp++);
end = time(NULL);
elapsed=end-start;
snprintf(message,20,"Duree = %f \r\n",(double)elapsed);
sciSend(scilinREG,20,(unsigned char *)message);

当我使用 JTAG 链接和 CodeComposerStudio(类似于 C 的 eclipse)运行程序时,显示是正确的(~4s)。但是当我在片上运行程序(独立)时,显示不正确(~637488s)并且无论延迟是多少都一样!

所以为什么?我认为时间计算取决于系统......如何在嵌入式处理器上计时(基准程序)?

4

2 回答 2

1

您正在使用的时钟频率是多少?您是否启用了任何中断?如果是这样,那么您的程序可能会被中断并经常跳转到 ISR,从而增加循环时间..对不起,我无权发表评论. 另外,如果您想为周期计时,最好使用内置计时器。

于 2013-02-14T09:09:33.517 回答
1

根据 ARM 关于ARM Cortex 处理器的 Dhrystone 基准测试的 PDF :

大多数现代 ARM 处理器都包含性能计数器。它们可以被编程来计算处理器周期的数量,这可以用来准确地计算经过的时间。必须重新定位clock() 函数才能使用此功能。[...] 在没有性能计数器和重定向的 clock() 函数的情况下,使用标准 C 库中的半主机 clock() 函数。必须连接能够支持半主机的调试器,例如 ARM RealView 调试器 (RVD) 或 DS-5 调试器。

然后,我认为 clock() 不会在芯片上运行。我将使用硬件计时器。你怎么看?我可以在片上使用clock()吗?为什么它会返回如此奇怪的持续时间(63488 等)?

于 2013-02-14T13:00:17.330 回答