/****************************************************************/ /* Paulo Pedreiras, Set/2003 */ /* UA, Sistemas de Tempo Real, Lab */ /* */ /* Calcula e mostra a diferenca entre os tempos de */ /* activacao de instancias consecutiva de um "loop de controlo" */ /****************************************************************/ #include #include #include #include #include #include int main(int argc, char **argv) { struct timeval tact,tant; long d_s,d_ms,d_us,tsleep; long i; float lixo; char toutp; int first_flag=0; /* Check input args */ if(argc != 3 || (tolower(argv[2][0]) != 'y' && tolower(argv[2][0]) != 'n') ){ printf("\n Usage: tick msecs output({y,n})\n"); return 1; } tsleep=atol(argv[1])*1000; toutp=tolower(argv[2][0]); /* Welcome message */ printf("\n tick: Sleeping by %ld miliseconds\n", atol(argv[1])); /* Main loop */ while(1){ /* Get current system time */ gettimeofday(&tact,NULL); //printf("\n sec:%ld usec:%ld",tact.tv_sec, tact.tv_usec); if(first_flag){ /* If not first instance */ /* Compute delay between activations */ d_s=tact.tv_sec-tant.tv_sec; if(d_s==0) d_us=tact.tv_usec-tant.tv_usec; else { d_us=tact.tv_usec + (1000000-tant.tv_usec); if(d_us < 1000000) d_s--; else d_us-=1000000; } d_ms=d_us/1000; if(toutp == 'y'){ if(d_s>0) printf("\n Slep %lds:%ldms",d_s,d_ms); else printf("\n Slep %ldms",d_ms); } } else first_flag=1; tant=tact; for(i=0;i<100000L;i++) lixo=sqrt(125); if(argv[1]!=0) usleep(atol(argv[1])*1000); } return 0; }