amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > BattClock [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

27.04.2004, 12:50 Uhr

THDany
Posts: 38
Nutzer
Mahlzeit!

Bin gerade auf ein neues Problem in meiner Uhr gestossen. Ich will das die Uhr zur Sommer und Winterzeit automatisch die BattClock umstellt, spricht die aktuellen, mit time(); ermittelten Sekunden +-3600 in die BattClock speichert.

Nun habe ich ein kleines Programm zum Testen geschrieben, welches folgendermassen aussieht:

#include <time.h>
#inclue <proto/battclock.h>

void main()
{
time_t jetzt;

time(&jetzt);

jetzt -=3600;

WriteBattClock(jetzt);
}

Will ich es so compilieren bekomme ich die Fehlermeldung vom Linker, dass BattClockBase nicht nicht definiert ist.

Füge ich nun struct Library *BattClockBase; hinzu compiliert er das Teil anstandslos und beim Ausführen schmiert es mir ab. Ich würd ja gern eine Library für das Teil öffnen, nur welche? Oder mache ich sonst etwas falsch?

[ - Antworten - Zitieren - Direktlink - ]

27.04.2004, 13:40 Uhr

gni
Posts: 1106
Nutzer
Zitat:
THDany:
Ich will das die Uhr zur Sommer und Winterzeit automatisch die BattClock umstellt, spricht die aktuellen, mit time(); ermittelten Sekunden +-3600 in die BattClock speichert.

Eventuell ist UnixClock (AMiNet) Dir eine Hilfe. Das ist der Quellcode dabei.
Zitat:
#include <time.h>
#inclue <proto/battclock.h>

void main()
{
time_t jetzt;

time(&jetzt);

jetzt -=3600;

WriteBattClock(jetzt);
}

Du kannst nicht einfach OS-Funktionen mit Funktionen der C-Standardbiliothek mischen! Es gibt auch eine ReadBattClock Funktion.
Zitat:
Will ich es so compilieren bekomme ich die Fehlermeldung vom Linker, dass BattClockBase nicht nicht definiert ist.
Füge ich nun struct Library *BattClockBase; hinzu compiliert er das Teil anstandslos und beim Ausführen schmiert es mir ab. Ich würd ja gern eine Library für das Teil öffnen, nur welche?

Nur die Variable definieren reicht auch nicht. Schau Dir die Quelle von UnixClock an.
Zitat:
Oder mache ich sonst etwas falsch?
Ja. void main() ist falsch.


[ Dieser Beitrag wurde von gni am 27.04.2004 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

27.04.2004, 14:17 Uhr

chkamiga
Posts:
[Ex-Mitglied]
Warum machst du das nicht mit Setclock?
--
http://people.freenet.de/CHRAmiga.de

CHRKUM@web.de

[ - Ändern - Antworten - Zitieren - Direktlink - ]

27.04.2004, 14:29 Uhr

thomas
Posts: 7716
Nutzer
Zitat:
Original von chkamiga:
Warum machst du das nicht mit Setclock?
--
http://people.freenet.de/CHRAmiga.de


CHRKUM@web.de



Weil er ein Programm schreiben will und keine Krücke ?

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: home.t-online.de/home/thomas-rapp/

[ - Antworten - Zitieren - Direktlink - ]

27.04.2004, 15:19 Uhr

melior
Posts: 160
Nutzer
Zitat:
Füge ich nun struct Library *BattClockBase; hinzu compiliert er das Teil anstandslos und beim Ausführen schmiert es mir ab. Ich würd ja gern eine Library für das Teil öffnen, nur welche? Oder mache ich sonst etwas falsch?

Dann hast Du wohl OpenResource ("battclock.resource") vergessen.

[ - Antworten - Zitieren - Direktlink - ]

27.04.2004, 19:00 Uhr

chkamiga
Posts:
[Ex-Mitglied]
>Weil er ein Programm schreiben will und keine Krücke ?

Kann er doch

X=execute("c:setclock....


--
http://people.freenet.de/CHRAmiga.de

CHRKUM@web.de

[ - Ändern - Antworten - Zitieren - Direktlink - ]

27.04.2004, 23:20 Uhr

THDany
Posts: 38
Nutzer
Na jetzt aber. Soetwas mag ja als Notlösung, oder Übergangslösung durchgehen, aber die elegante Methode isses ja nun nicht.

Aber zurück zum Thema. Ich hab mit OpenResource(); die battclock.resource geöffnet und kann wunderbar mit ReadBattClock(); die Sekunden auslesen. Auch schreiben ist ansich kein Problem, bis auf die Kleinigkeit, dass ich trotz Subtrahieren von Sekunden nach WriteBattClock(); eine Zeit in der Zukunft bekomme und dazu die Uhr erst nach einem Neustart umgestellt wird. Leider sehe ich in battclock.h nur ReadBattClock(); ResetBattClock(); und WriteBattClock(). Ich versuche es noch mit ResetBattClock(); vor WriteBattClock(); aber das löst nicht mein Problem mit der korrekten Zeit. Aus UnixClock werd ich auch nicht richtig schlau, da diese eine UnixUhr produziert. Keine Ahnung was das soll. Auf jeden Fall sehe ich in dem Quelltext keine Lösung auf mein Problem. Doch wenn es doch Sekunden seit dem 1.1.1978 sind, die von ReadBattClock(); zurückgegeben werden, dann müsste die zurückgegebene Zeit in Sekunden - 3600 doch die entsprechende Zeit - 1 Stunde ergeben, oder blicke ich da gerade nicht richtig durch?

[ - Antworten - Zitieren - Direktlink - ]

28.04.2004, 08:17 Uhr

melior
Posts: 160
Nutzer
Zitat:
Aber zurück zum Thema. Ich hab mit OpenResource(); die battclock.resource geöffnet und kann wunderbar mit ReadBattClock(); die Sekunden auslesen. Auch schreiben ist ansich kein Problem, bis auf die Kleinigkeit, dass ich trotz Subtrahieren von Sekunden nach WriteBattClock(); eine Zeit in der Zukunft bekomme und dazu die Uhr erst nach einem Neustart umgestellt wird.

Über die battclock.resource stellst Du nur die Echtzeituhr des Amigas. Wenn Du die Uhrzeit Deines Rechners dauerhaft verstellen willst, dann mußt Du sowohl die Systemuhr (timer.device:setSysTime) als auch die Echtzeituhr stellen.

[ - Antworten - Zitieren - Direktlink - ]

28.04.2004, 08:49 Uhr

gni
Posts: 1106
Nutzer
Zitat:
melior:
Über die battclock.resource stellst Du nur die Echtzeituhr des Amigas. Wenn Du die Uhrzeit Deines Rechners dauerhaft verstellen willst, dann mußt Du sowohl die Systemuhr (timer.device:setSysTime) als auch die Echtzeituhr stellen.

Und das alles kann man sich schön im Quellcode von UnixClock anschauen ;-) Was auch immer es da nicht zu verstehen gibt.

[ Dieser Beitrag wurde von gni am 28.04.2004 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

28.04.2004, 11:46 Uhr

Goos
Posts: 69
Nutzer
Also bei mir funktioniert die Methode sekunden=ReadBattlCock() sekunden - 3200 und dannach WriteBattClock(sekunden) dann hat mann es eine Stunde früher. vieleicht ein Tippfehler?
hast Du zufälligerweisse den 7. Februar 2014 ? :D

gruss Goos

[ - Antworten - Zitieren - Direktlink - ]

28.04.2004, 12:13 Uhr

THDany
Posts: 38
Nutzer
ja habe ich warum? Wo hab ich mich da vertippt?

[ - Antworten - Zitieren - Direktlink - ]

28.04.2004, 12:28 Uhr

thomas
Posts: 7716
Nutzer
Zitat:
Original von THDany:
ja habe ich warum? Wo hab ich mich da vertippt?


Wenn du den Code nicht hinschreibst, kann dir das keiner sagen. Oder meinst du dein Beispiel oben ? Da ist es klar: time() gibt dir die Sekunden seit 1970 und WirteBattClock() erwartet die Sekunden seit 1978.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: home.t-online.de/home/thomas-rapp/

[ - Antworten - Zitieren - Direktlink - ]

28.04.2004, 12:37 Uhr

Goos
Posts: 69
Nutzer
Zitat:
Original von THDany:
ja habe ich warum? Wo hab ich mich da vertippt?


vieleicht sekunden=-3200; statt sekunden-=3200; ?

[ - Antworten - Zitieren - Direktlink - ]

28.04.2004, 16:29 Uhr

THDany
Posts: 38
Nutzer
Thomas hat recht. Bei meinen ersten Versuchen die Zeit umzustellen habe ich tatsächlich die Zeit von Time genommen. Jetzt wo ich die Zeit mit ReadBattClock(); ermittle ist das Problem verschwunden und die Uhr wird einwandfrei zu meinen Vorstellungen umgestellt.

Auch mit dem Timer bin ich jetzt zurande gekommen. Nachdem ich ja hier in Erfahrung gebracht habe, dass es einen Unterschied zwischen der SystemUhr und der EchtzeitUhr gibt konnte ich wirklich die Teile aus UnixClock übernehmen, allerdings auf meine Bedürfnisse etwas angepasst.

Ich komme aber auch noch andere Fragen.

1. Kennt sich hier jemand mit SNTP aus? Würde gerne eine derartige Unterstützung in meine Uhr einbauen, um die Echtzeituhr mit der des Internets zu syncronisieren. Allerdings mangelt mir im Moment die Zeit mich mit dem Protokoll von NULL ab auseinander zu setzen. Kann mir da jemand Hilfestellung geben oder ein bestehender Client mit Quelltext angeben? Muss keiner für den Amiga sein, reicht wenn der Quelltext in C vorhanden ist.

2. Wie sind denn die genauen Sekunden zwischen 1.1.1970 und 1.1.1978?

[ - Antworten - Zitieren - Direktlink - ]

28.04.2004, 17:18 Uhr

melior
Posts: 160
Nutzer
Zitat:
2. Wie sind denn die genauen Sekunden zwischen 1.1.1970 und 1.1.1978?

252457200 (ohne Gewähr)

[ - Antworten - Zitieren - Direktlink - ]

29.04.2004, 12:51 Uhr

gni
Posts: 1106
Nutzer
Zitat:
melior:
Zitat:
2. Wie sind denn die genauen Sekunden zwischen 1.1.1970 und 1.1.1978?
252457200 (ohne Gewähr)
IMHO fehlen da 60min: 2922 is the number of days between 1.1.1970 and 1.1.1978 (2 leap years and 6 normal)

[ - Antworten - Zitieren - Direktlink - ]

29.04.2004, 13:37 Uhr

melior
Posts: 160
Nutzer
Zitat:
Zitat:
melior:
Zitat:
2. Wie sind denn die genauen Sekunden zwischen 1.1.1970 und 1.1.1978?
252457200 (ohne Gewähr)
IMHO fehlen da 60min: 2922 is the number of days between 1.1.1970 and 1.1.1978 (2 leap years and 6 normal)

Stimmt, während der Sommerzeit muß man nochmal 3600 addieren.

[ - Antworten - Zitieren - Direktlink - ]

29.04.2004, 14:34 Uhr

thomas
Posts: 7716
Nutzer
Zitat:
Original von melior:

Stimmt, während der Sommerzeit muß man nochmal 3600 addieren.


Am ersten Januar ist aber tiefster Winter. Außerdem ist die Anzahl Sekunden pro Tag immer gleich, egal ob Winter- oder Sommerzeit.

(8 * 365 + 2) * 24 * 60 * 60 = 252460800

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: home.t-online.de/home/thomas-rapp/

[ - Antworten - Zitieren - Direktlink - ]

29.04.2004, 17:17 Uhr

melior
Posts: 160
Nutzer
Zitat:
Am ersten Januar ist aber tiefster Winter. Außerdem ist die Anzahl Sekunden pro Tag immer gleich, egal ob Winter- oder Sommerzeit.

Nicht ganz. Du berechnest den Abstand 1.1.70 (UTC) bis 1.1.78 (UTC). Was Danny aber vermutlich sucht, ist der Abstand 1.1.70 (UTC) bis 1.1.78 (MET bzw. MEST).

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > BattClock [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.