- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 8 von 8

Thema: Zeitmessung mit dem PI (in C)

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    39
    Beiträge
    647

    Zeitmessung mit dem PI (in C)

    Anzeige

    E-Bike
    Hi,

    ich versuche mich gerade daran ein kleines Programm zu schreiben, mit dem ich testen kann wie lang es z.B. dauert bis 100 zu zählen. Aber irgendwie gelingt mir das nicht. Das eigentliche Ziel ist, später Messungen durchzuführen, deren Zeitinterval möglichst gleich ist. Also z.B. 100 Messungen/s möglichst gleichmäßig auf eine Sekunde verteilt durchzuführen.

    Hier mal was ich bis jetzt habe:
    Code:
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    main()
    {
    double a,b,c;
            a = clock();
            printf("%d\n",a);
            printf("%d\n",a);
            b = clock();
            c = b-a;
            printf("%f - %f = %f\n",b,a,c);
            return(0);
    }
    Die Ausgabe sieht dann so aus:
    Code:
    100
    1
    0.000000 - 0.000000 = 0.000000
    Was mich z.B. sehr wundert, ist das wenn ich "a" zweimal ausgebe, der Wert ein anderer ist. Obwohl ich die Variable ja eigentlich garnicht mehr angefasst habe.

    Habt ihr einen Tip für mich?

    Danke
    Gruß Daniel
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  2. #2
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Hey,

    in wie weit unterscheiden sich die Variablen den dann?
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    39
    Beiträge
    647
    So wie ich das verstanden habe, sollte clock() ja die aktuelle Zeit zurückgeben. Also sollten sich "a" und "b" ja geringfügig unterscheiden. Die Differenz daraus wäre dann mein Zeitunterschied. Das klappt aber nicht.
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.679
    Zitat Zitat von DanielSan Beitrag anzeigen
    ... sollte clock() ja die aktuelle Zeit ... sollten sich "a" und "b" ja geringfügig ...
    a) So wie ich das verstehe, clockt das Pi recht flott.
    b) In welcher Feinheit wird "clock()" gemessen? Hunderstel, tausendstel, millionstel Sekunden??

    Code:
    ...
    main()
    {
    ...
            a = clock();
            printf("%d\n",a);
            printf("%d\n",a);
            b = clock();
            ...
    }
    Wenn ich annehme, dass die clock in tausendstel Sekunden gemessen wird (ein durchaus brauchbarer Wert) kann ich mir vorstellen, dass das Pi sich bei der Aufgabe so langweilt, dass da garnix clockt . . .
    Ciao sagt der JoeamBerg

  5. #5
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Hey,

    schau mal vielleicht hilft dir das ja weiter:

    http://www.cplusplus.com/reference/ctime/clock/

    So wie ich das verstehe gibt Clock nur die Ausführungszeit des Programms aus.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    39
    Beiträge
    647
    @Kampi: Ja so hab ichs auch verstanden. Sollte aber doch trotzdem funktionieren!?

    @Oberallgeier: Habe meinen Code mal etwas geändert:
    Code:
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    main()
    {
    int i;
    double a,b,c;
            a = clock();
            for (i=0;i<5000;i++){
                    printf("%f\n", a);
            }
            b = clock();
            c = b-a;
            printf("%f - %f = %f\n",b,a,c);
            return(0);
    }
    Die Ausgabe sieht dann so aus:

    Code:
    ...
    0.000000
    0.000000
    0.000000
    0.000000
    0.000000
    0.000000
    380000.000000 - 0.000000 = 380000.000000
    Sind das dann 380000 Mikrosekunden? Das wären ja 380 Millisekunden bzw. 0,38 Sekunden. Gefühlt könnte das schon hinkommen. Aber die Genauigkeit wäre ja dann "nur" 0,01 Sekunden also hundertstel Sekunden. Das ist mir zu ungenau, besonders wenn man die Leistung des Pi´s bedenkt. Da muss doch noch mehr gehen!?

    Danke
    Gruß Daniel

    - - - Aktualisiert - - -

    Ok hab nochmal ein bisschen rumgespielt.

    Code:
    Code:
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    #include <sys/time.h>
    
    main()
    {
    struct timeval tim;
    int i;
    double t1,t2,c;
            gettimeofday(&tim, NULL);
            t1=tim.tv_sec+(tim.tv_usec/1000000.0);
            for (i=0;i<5000;i++){
                    printf("test\n");
            }
            gettimeofday(&tim,NULL);
            t2=tim.tv_sec+(tim.tv_usec/1000000.0);
    
            c = t2-t1;
            printf("%.6lf - %.6lf = %.6lf\n",t2,t1,c);
            return(0);
    }
    Die Ausgabe:
    Code:
    ...
    test
    test
    test
    test
    test
    1358692383.953361 - 1358692383.271900 = 0.681461
    Das ist ja schonmal deutlich genauer. 4999 mal "test" zu schreiben, dauert also ca. 0.6 Sekunden. Ich hab den Code jetzt mehrmals ausgeführt. Es gibt eine Abweichung von +-0.1 Sekunden. Liegt das daran, das es nicht Echtzeitmäßig läuft? Oder weil mein Pi auch noch was anderes macht? Prozessorlast ist auf maximal 0.1%.
    Ist eine "genaue" Zeitmessung mit dem Pi also Systembedingt garnicht möglich?

    Gruß
    Danke Daniel
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  7. #7
    RN-Premium User Begeisterter Techniker
    Registriert seit
    30.04.2004
    Alter
    47
    Beiträge
    245
    Ja, ich vermute mal ohne Echtzeittauglichem Betriebssystem wirst du immer dieses Problem haben, da dein Prozess keine garantierte Zykluszeit bekommt. Ist also nur bedingt für exakte Aufgaben geeignet. Liegt wie gesagt aber nicht am Pi selbst, sondern an der Betriebssystemarchitektur - das Problem hast mit PCs ebenso.

  8. #8
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Auch für den Arm gibts den RTAI Kernel Patch und RT_PREMPT.

    Gurß
    Georg

Ähnliche Themen

  1. Zeitmessung mit dem Atmega8 - geht das?
    Von Körperkrämer im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 13
    Letzter Beitrag: 20.03.2008, 15:52
  2. Zeitmessung mit ATMega32
    Von stormracer im Forum C - Programmierung (GCC u.a.)
    Antworten: 7
    Letzter Beitrag: 23.01.2007, 21:37
  3. Zeitmessung mit Timer
    Von spaceduck im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 30.03.2006, 18:20
  4. Zeitmessung mit Lichtschranke
    Von trinity4711 im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 10.02.2006, 19:59
  5. Zeitmessung mit Palm V
    Von robtix im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 0
    Letzter Beitrag: 21.01.2006, 23:30

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests