繁体   English   中英

调试时的时间()正常(JTAG),在片上运行时不正常。 如何使用嵌入式proc?

[英]time() ok when debugging (JTAG), not-ok when running on-chip. How to time with an embedded proc?

我正在“玩”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),无论延迟是什么!

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

您正在使用的时钟频率是多少?。您启用了任何中断吗?如果是这样,那么您的程序可能会被中断并经常跳转到ISR,从而增加了循环的时间。我没有权利发表评论。 如果你想让周期更好,可以使用内置计时器。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM