gpt4 book ai didi

在linux下创建一个自由运行的实时定时器

转载 作者:行者123 更新时间:2023-11-30 17:36:34 25 4
gpt4 key购买 nike

我正在研究实时Linux,想要创建一个自由运行的计时器。但我无法找到有关实时Linux 的信息。有人可以向我推荐一些文档吗?或者有人可以告诉我如何创建一个自由运行的高精度计时器吗?

实现:创建一个自由运行的定时器后,这样我就可以获得时间戳值。

最佳答案

使用实时 Linux 的全部意义在于它就是 Linux - 所有现有的 Linux 和 POSIX 服务都可用,如果考虑可移植性,您应该避免使用专有的非 POSIX 操作系统服务问题 - 否则你可能会使用真正的 RTOS。

标准函数clock()在 POSIX 上,CLOCKS_PER_SEC 为 1000000(即微秒)。然而,实际的粒度取决于实现。您可以通过以下方式检查您的系统:

#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 上,得到以下结果:

Clock granularity = 0.010000 seconds

即10 毫秒。

如果这还不够,可以定义许多时钟源以与 clock_gettime() 一起使用。每个的分辨率可以通过clock_getres()确定。时钟 ID CLOCK_PROCESS_CPUTIME_ID 可能是合适的。请注意,这里的分辨率和粒度也不相同。我在ideone.com上进行了以下测试:

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

结果:

Clock granularity = 0.000001 seconds
CPUTIME resolution = 0.000000001000000 seconds

因此粒度为 1 微秒。

关于在linux下创建一个自由运行的实时定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22627241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com