2013-11-15 2 views
0

나는 1uS마다 호출하려는 타이머 기능 (폴링 용)이 있지만 다른 작업을 실행하기에 충분한 시간이 있는지 확인하여 소요 시간을 측정하고 싶습니다 이 기능을 실행합니다. 그 때문에 나는 내 기능의 시작과 맨 마지막에 clock_gettime()을 사용할 수 있다고 생각했다. 이제 내 문제는 반환 된 두 시간이 항상 같고 내 기능이 1 나노초 미만으로 진행되는 것을 믿지 않는다는 것입니다. 가능한 기간이 아닙니다. CPU는 800MHz로 클럭됩니다. 내 코드 :타이머 기능의 지속 시간 측정

struct timespec tempTime_start; 
struct timespec tempTime_stop; 
static int print = 0; 
if(clock_gettime(CLOCK_REALTIME, &tempTime_start)) 
    printf("Error in clock_gettime(): %s",strerror(errno)); 
    ... 
    ...MY FUNCTION... 
int i = 0; 
for (i = 0;i<100000;i++); 
if(clock_gettime(CLOCK_REALTIME, &tempTime_stop)) 
    printf("Error in clock_gettime(): %s",strerror(errno)); 
if (print <= 100){ 
    printf("%dDuration: %d\n",print,(tempTime_stop.tv_nsec - tempTime_start.tv_nsec)); 
    printf("Start: %d\n",tempTime_start.tv_nsec); 
    printf("Stop: %d\n",tempTime_stop.tv_nsec); 
    print++; 
} 

내가 뭘 잘못하고 있니? 시작 및 종료 시간은 항상 동일합니다 ...

답변

1

clog_gettime은 시스템 시계에서 구동됩니다. tv_nsec 멤버는 꽤 의미가 없습니다.
해상도는 60Hz에서 4KHz 사이입니다.

타임 스탬프를 수행하려면 sysTimestamp 기능을 사용해야합니다.
이것은 종종 ns 정확도를 제공하는 감소 카운터 (PPC 아키텍처에서)를 사용합니다.

그러나 시스템을 사용하려면 시스템을 구성해야합니다.