Zeitmessung mit clock()???
-
Hallo Forumler,
ich soll für die Uni eine DCF-Uhr programmieren, wobei mir das Signal am LPT-Port anliegt. Nun simuliere ich zu Hause mit einem zweiten Rechner das Signal und lese es mit dem Programmierrechner (Linux) ein.
Bis zur Ausgabe der SIGN_TICKs funktioniert es auch, da er mir da die Durchläufe der Schleife für die logische Null bzw. logische Eins richtig durchzählt! Ich bekomme dann Probleme die Zeit des Signalabfalls (0,1 Sek. für logische 0 bzw. 0,2 Sek. für logische 1) am Anfang jeder Sekunde zu messen bzw. dieses Durchzählen in eine Zeit umzumünzen!Wo liegt der Fehler bzw. was kann man verbessern???
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <time.h> #include "parapin.h" main() { int SIGN, TIME, SIGN_TICK, SIGN_TICK2, SYNC; clock_t TMR_STRT, TMR_END; while(1) {while(SYNC) {if(pin_init_user(LPT1) < 0) exit(0); int PING = pin_is_set(LP_PIN13); if(PING) {SIGN = 1;} else{SIGN = 0;} //printf("%d\r", SIGN); if(SIGN == 1) {SIGN_TICK2 = 0; SIGN_TICK++;} if(SIGN == 0) {SIGN_TICK = 0; SIGN_TICK2++;} printf("%d :%d \n", SIGN_TICK, SIGN_TICK2); /* Bis hierher läuft es meiner Einschätzung nach fehlerfrei*/ if(SIGN_TICK == 1) {TMR_STRT = clock();} if(SIGN_TICK2 == 1) {TMR_END = clock();} TIME = (TMR_END - TMR_STRT) / CLOCKS_PER_SEC; //printf("%g\n", (TIME)); /*Hier ist das Ergebnis immer 2.122e-314! Das erscheint mir ziemlich wenig, weil ich eigentlich 0,1 bzw 0,2 Sekunden erwarte! :( */ } } }
Bitte seid nicht zu streng, mit der Form und allem Anderen, denn ich beschäftige mich gerade seit 2 Tagen mit C bzw. mit überhaupt einer Programmiersprache!
MfG Boernemann
-
Kann oder will mir niemand helfen!?
Ich wäre auch mit Kritik an banalen Dingen, wie der Form oder dem Aufbau oder Sonstigem zurecht gekommen, aber wenn nichtmal das bemängelt wird, dann scheint das wohl ein unlösbares Problem zu sein!
MfG Boernemann
-
Die Funktion clock() ist nicht zur Zeitmessung geeignet, da sie nur die verbrauchte CPU-Zeit des Programms zurückgibt.
Ich verwende folgende Funktion zur Zeitmessung (gibt vergangene Millisekunden seit dem ersten Aufruf der Funktion zurück):
#include <sys/time.h> unsigned int mclock() { static struct timeval start={-1}; if (start.tv_sec==-1)gettimeofday(&start,NULL); struct timeval now; gettimeofday(&now, NULL); long seconds, useconds; seconds = now.tv_sec - start.tv_sec; useconds = now.tv_usec - start.tv_usec; return (seconds*1000 + useconds/1000.0) + 0.5; }