annA: aktuelle Zeit

Hallo zusammen,

die time-Funktion in C gibt ja die Sekunden zurück, gibts
da noch was genaueres? Viellicht hundertsel oder so?

Viele Grüße
annA

PS: Es muß eine C-Funktion sein!

  1. schau dir mal das an, villeicht hilfts

    http://www-user.tu-chemnitz.de/~heha/viewzip.cgi/bastelecke/Rund%20um%20den%20PC/Wetterstation/telemet.zip/tenki.c?auto=CPP

    1. hi x-man

      danke für den Link, werde mir mal die GetTimeFormat-Funktion
      anschauen, vielleicht kann ich die verwenden.

      Gruß
      annA

  2. Hallo annA,

    hast Du die Lib BIOS.H ?

    Dann steht Dir die Funktion biostime(int cmd, long time) zur Verfügung. Allerdings liest die nur die vier Bytes im Bios-Variablenbereich der Maschine aus. Die Sekunden in Ticks (65536 sind eine Stunde) und Stunden und Tage.

    Diese Zeit läuft weg und außerdem hat sie um Mitternacht eine Definitionslücke von ca. 7 Sekunden, was durch Quantisierungsprobleme bei der ganzzahligen Division begründet ist.

    long biostime(int cmd, long newtime);
     0 Lesen des Zählers (newtime ignoriert)
     1 Setzen des Zählers auf den Wert von
      newtime, Ergebnis == newtime

    Die Zeit wird ab 0 Uhr in 18.2 Einheiten pro Sekunde gelesen.

    Ich hoffe, das hilft Dir weiter.

    LG

    Tom

    1. Hi Tom

      hast Du die Lib BIOS.H ?

      ich habe die leider nicht, und die Gefahr, dass mein Prof
      die auch nicht hat, ist mir zu groß.

      Vielleicht finde ich ja noch eine andere Lösung...

      Trotzdem danke :o)

      Gruß
      annA

      1. Hallo Anna,

        hast Du die Lib BIOS.H ?
        ich habe die leider nicht, und die Gefahr, dass mein Prof
        die auch nicht hat, ist mir zu groß.

        Unter welchem Betriebssystem wird programmiert?

        Bei DOS / Windows wäre es so:

        Dann musst Du eben eine Stufe tiefer klettern und die BIOS-Variablen direkt auslesen. Das geht auch noch unter Windows. Da muss man sich nur erst den Zeiger auf die Kopie des Bios-Variablenbereiches des aktuellen Prozesses besorgen. Wie die Compiler-Variable bei C heißt, weiß ich leider nicht. Das müsste ja aus der Hilfe zum System Programmiersystem herauszufinden sein.

        Im Real-Mode liegt die bei 0040:0000 oder auch 0000:0400 , was das selbe ist. Dementsprechend wird diese 0400 im Namen der Variable vorkommen, so wie es nach guter alter Systemprogrammiererart Sitte ist.

        In der Variablen steht dann der Descriptor auf die Variablenstruktur. Den setzt Du dann als Segment-Anteil ein

        bei mem400:006C stehen dann die vier Bytes für die DOS-Zeit.

        Denk beim Lesen an die Intel-Konvention.

        Grüße

        Tom

  3. Hallo Anna,

    nun mal anders herum gefragt. Hast Du in C schon direkt mit Interrupts gearbeitet? Dann müsste eigentlich auch Windows noch der Int 1Ah Dein Freund sein. Der liest die Hardwareuhr von PC-basierten Systemen aus.

    Und über das DOS-API int 21h AH=2Ch

    Nach dem Aufruf steht in
    CH   Stunde
    CL   Minute
    DH   Sekunde
    DL   Hundertstel Sekunde

    Viel Erfolg

    Grüße

    Tom

  4. Hallo annA,

    warum brauchst du die hundertstel denn, wahrscheinlich für eine stoppuhr?

    ich benutze in diesem fall die eigene funktion readCounter:

    (Windows / intel-compiler)

    __int64 readCounter(void){
      __asm rdtsc;  // read_timestamp_counter
    }

    (Linux / gcc)

    long long readCounter(void){
      asm("rdtsc");  // read_timestamp_counter
    }

    start=readCounter(); ... Anweisungen ...; end=readCounter();
    dauer=end-start;

    'dauer' ist dann die anzahl der prozessortackte für ... Anweisungen ... und die kann man ja in millionstel sek. umrechnen wenn du lust hast...

    falls das überhaupt das ist was du suchst, kannst dich ja nochmal melden...

    gruß oggy

    1. HI Oggy,

      ja, brauche die Hundertstel für eine art Stoppuhr:
      Ich bekomme von einem Server die Y-Werte einer Sinuskurve und muß
      die Frequenz berechnen.

      Gruß
      annA