首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在实时linux中创建一个自由运行的计时器。

在实时linux中创建一个自由运行的计时器。
EN

Stack Overflow用户
提问于 2014-03-25 06:47:24
回答 1查看 1.3K关注 0票数 0

我正在学习实时linux,并希望创建一个自由运行的计时器。但我无法找到有关实时linux的信息。有人能建议我一些文件,或者有人能告诉我如何创建一个自由运行的高精度计时器吗?

成就:创建了一个自由运行的计时器,这样我就可以得到时间戳的值了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-25 18:06:44

使用实时Linux的全部意义在于它是Linux --所有现有的Linux和POSIX服务都是可用的,如果可移植性是问题,您应该避免使用专有的非POSIX OS服务--否则,您还可以使用真正的RTOS。

标准函数clock()对POSIX的CLOCKS_PER_SEC为1000000 (即微秒)。然而,实际的粒度是依赖于实现的。您可以使用以下方法检查系统:

代码语言:javascript
复制
#include <time.h>
#include <stdio.h>

int main()
{
    clock_t t0 = clock() ;
    clock_t t1 = t0 ;
    while( t0 == t1 )
    {
        t1 = clock() ;
    }

    printf( "Clock granularity = %lf seconds\n", (double)(t1 - t0)/(double)(CLOCKS_PER_SEC) ) ;

    return 0 ;
}

在ideone.com上,这给出了以下结果:

代码语言:javascript
复制
Clock granularity = 0.010000 seconds

即10毫秒。

如果这还不够,定义了许多用于clock_gettime()的时钟源,并且每个时钟源的分辨率可以由clock_getres()来确定。时钟ID CLOCK_PROCESS_CPUTIME_ID可能是合适的。请注意,这里的分辨率和粒度也不一样。我在ideone.com上执行了以下测试:

代码语言:javascript
复制
#include <time.h>
#include <stdio.h>

int main()
{
    struct timespec t0 ;
    struct timespec t1 ;
    clock_gettime( CLOCK_PROCESS_CPUTIME_ID, &t0) ;
    t1 = t0 ;
    while( t0.tv_nsec == t1.tv_nsec )
    {
        clock_gettime( CLOCK_PROCESS_CPUTIME_ID, &t1) ;
    }

    printf( "Clock granularity = %lf seconds\n", (double)(t1.tv_nsec - t0.tv_nsec)/1e9 ) ;

    struct timespec res ;
    clock_getres( CLOCK_PROCESS_CPUTIME_ID, &res ) ;
    printf( "CPUTIME resolution = %.15lf seconds\n", e, (double)(res.tv_nsec)/1e9) ;


    return 0 ;
}

取得的成果:

代码语言:javascript
复制
Clock granularity = 0.000001 seconds
CPUTIME resolution = 0.000000001000000 seconds

所以粒度是1微秒。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22627241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档