我正在研究一个秒表项目,我需要阅读程序运行时已经过去的时间并从中构建我的时间基础。
我已经包含了time.h
库,甚至将.h文件放在我的项目目录中但是由于某种原因,一旦我使用clock()
函数,我的代码就无法正确地构建在这个或任何一个上我的atmel 7项目。
我包含了一个我认为应该编译的简单编码,以及我在尝试构建时获得的错误。我怀疑这个问题与atmel 7有关,但任何其他建议都会受到赞赏。
#include <time.h>
#include <avr/io.h>
#include <stdio.h>
int main()
{
clock_t start_t, end_t, total_t;
int i;
start_t = clock();
printf("Starting of the program, start_t = %ld\n", start_t);
printf("Going to scan a big loop, start_t = %ld\n", start_t);
for(i=0; i< 10000000; i++)
{
}
end_t = clock();
printf("End of the big loop, end_t = %ld\n", end_t);
total_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;
printf("Total time taken by CPU: %ld\n", total_t );
printf("Exiting of the program...\n");
return(0);
}
错误:
recipe for target 'clocktest3.elf' failed
undefined reference to 'clock'
id returned 1 exit status
答案 0 :(得分:2)
由于AVR系统中没有时钟源,显然无法正常工作。
您需要做的是启用一个定时器,例如TIMER0,并将其配置为1ms滴答,然后处理中断值或只读取当前计数。但请记住,定时器可以非常快地溢出(8位或16位定时器)。
答案 1 :(得分:0)
此页面atmel 7表示芯片必须具有RTC
模块。您使用的芯片是否具有该模块?
以下(修改)代码:
现在是代码:
#include <time.h>
//#include <avr/io.h>
#include <stdio.h>
int main()
{
clock_t start_t, end_t;
double total_t;
int i;
start_t = clock();
printf("Starting of the program, start_t = %ld\n", start_t);
printf("Going to scan a big loop, start_t = %ld\n", start_t);
for(i=0; i< 10000000; i++)
{
}
end_t = clock();
printf("End of the big loop, end_t = %ld\n", end_t);
total_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;
printf("Total time taken by CPU: %lf\n", total_t );
printf("Exiting of the program...\n");
return(0);
}
在我的计算机上输出上述代码:
Starting of the program, start_t = 498
Going to scan a big loop, start_t = 498
End of the big loop, end_t = 33075
Total time taken by CPU: 0.032577
Exiting of the program...
因此,OP发布的代码和现实的预期似乎已经减少了(至少)两个数量级。
当OP发布的代码未链接时,无法显示OP发布的输出。
BTW:这是OP在逻辑/数学校正之前发布代码输出的内容。
Starting of the program, start_t = 473
Going to scan a big loop, start_t = 473
End of the big loop, end_t = 33022
Total time taken by CPU: 0
Exiting of the program...
注意&#34; CPU占用的总时间为#&#34;