我正在学习实时linux,并希望创建一个自由运行的计时器。但我无法找到有关实时linux的信息。有人能建议我一些文件,或者有人能告诉我如何创建一个自由运行的高精度计时器吗?
成就:创建了一个自由运行的计时器,这样我就可以得到时间戳的值了。
发布于 2014-03-25 18:06:44
使用实时Linux的全部意义在于它是Linux --所有现有的Linux和POSIX服务都是可用的,如果可移植性是问题,您应该避免使用专有的非POSIX OS服务--否则,您还可以使用真正的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微秒。
https://stackoverflow.com/questions/22627241
复制相似问题