内置功能clock()无法在atmel studio 7.0中运行

时间:2017-09-21 04:13:25

标签: c atmel atmelstudio

我正在研究一个秒表项目,我需要阅读程序运行时已经过去的时间并从中构建我的时间基础。

我已经包含了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

2 个答案:

答案 0 :(得分:2)

由于AVR系统中没有时钟源,显然无法正常工作。

您需要做的是启用一个定时器,例如TIMER0,并将其配置为1ms滴答,然后处理中断值或只读取当前计数。但请记住,定时器可以非常快地溢出(8位或16位定时器)。

答案 1 :(得分:0)

此页面atmel 7表示芯片必须具有RTC模块。您使用的芯片是否具有该模块?

以下(修改)代码:

  1. 干净地编译
  2. 表明适当的答案是一小部分而不是某个整数
  3. 现在是代码:

    #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;