void TASK(Task100ms_Raster)
{
int a,b,c;
struct timespec start, stop;
uint32 StartTime, StopTime;
uint32 duration100ms;
if( clock_gettime( CLOCK_REALTIME, &start) == -1 ) {
perror( "clock gettime" );
}
StartTime =start.tv_sec + 0.0000001 * start.tv_nsec;
printf("start time is %lu", StartTime);
printf("value is %d",c);
printf("ETAS1\n");
if( (StopTime = clock_gettime( CLOCK_REALTIME, &stop)) == -1 )
{
perror( "clock gettime" );
}
StopTime = stop.tv_sec + 0.0000001 * stop.tv_nsec;
printf("stop time is %lu", StopTime);
duration100ms = StopTime -StartTime;
printf( "time difference is= %lu\n", duration100ms );
}
Я создал таймер, который вычисляет время начала, время остановки и разницу между временем. Меня смущает спецификатор формата для времени начала, времени остановки и suration100ms. но структурируйте timepec start, stop; имеет тип http://www.qnx.com/developers/docs/6.3.0SP3/neutrino/lib_ref/t/timespec.html тогда какие могут быть правильные спецификаторы формата для получения результатов. некоторые направляют меня.
Вы выполняете вычисление с плавающей точкой для вычисления количества секунд, но сохраняете результат в целое число:
StartTime = start.tv_sec + 0.0000001 * start.tv_nsec;
это урезает результат до целых чисел. Вы должны сделать StartTime
в double
и распечатайте это так:
double StartTime = start.tv_sec + 1e-9 * start.tv_nsec;
printf("start time is %f\n", StartTime);
Я думаю, что для точности лучше конвертировать в число с плавающей точкой, когда вы вычисляете разницу:
double duration = StopTime.tv_sec - StartTime.tv_sec +
1E-9 * (StopTime.tv_nsec - StartTime.tv_nsec);
Если у вас должна быть длительность в виде целого числа в единицах 100 мс, вы можете сделать:
duration = 10000 * (StopTime.tv_sec - StartTime.tv_sec) +
(StopTime.tv_nsec - StartTime.tv_nsec) / 100000000;
Других решений пока нет …