amiga-news DEUTSCHE VERSION
.
Links| Forums| Comments| Report news
.
Chat| Polls| Newsticker| Archive
.

amiga-news.de Forum > Programmierung > BattClock [ - Search - New posts - Register - Login - ]

-1- [ - Post reply - ]

2004-04-27, 12:50 h

THDany
Posts: 38
User
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?

[ - Answer - Quote - Direct link - ]

2004-04-27, 13:40 h

gni
Posts: 1106
User
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. ]

[ - Answer - Quote - Direct link - ]

2004-04-27, 14:17 h

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

CHRKUM@web.de

[ - Edit - Answer - Quote - Direct link - ]

2004-04-27, 14:29 h

thomas
Posts: 7718
User
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/

[ - Answer - Quote - Direct link - ]

2004-04-27, 15:19 h

melior
Posts: 160
User
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.

[ - Answer - Quote - Direct link - ]

2004-04-27, 19:00 h

chkamiga
Posts:
[Former member]
>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

[ - Edit - Answer - Quote - Direct link - ]

2004-04-27, 23:20 h

THDany
Posts: 38
User
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?

[ - Answer - Quote - Direct link - ]

2004-04-28, 08:17 h

melior
Posts: 160
User
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.

[ - Answer - Quote - Direct link - ]

2004-04-28, 08:49 h

gni
Posts: 1106
User
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. ]

[ - Answer - Quote - Direct link - ]

2004-04-28, 11:46 h

Goos
Posts: 69
User
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

[ - Answer - Quote - Direct link - ]

2004-04-28, 12:13 h

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

[ - Answer - Quote - Direct link - ]

2004-04-28, 12:28 h

thomas
Posts: 7718
User
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/

[ - Answer - Quote - Direct link - ]

2004-04-28, 12:37 h

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


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

[ - Answer - Quote - Direct link - ]

2004-04-28, 16:29 h

THDany
Posts: 38
User
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?

[ - Answer - Quote - Direct link - ]

2004-04-28, 17:18 h

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

252457200 (ohne Gewähr)

[ - Answer - Quote - Direct link - ]

2004-04-29, 12:51 h

gni
Posts: 1106
User
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)

[ - Answer - Quote - Direct link - ]

2004-04-29, 13:37 h

melior
Posts: 160
User
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.

[ - Answer - Quote - Direct link - ]

2004-04-29, 14:34 h

thomas
Posts: 7718
User
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/

[ - Answer - Quote - Direct link - ]

2004-04-29, 17:17 h

melior
Posts: 160
User
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).

[ - Answer - Quote - Direct link - ]


-1- [ - Post reply - ]


amiga-news.de Forum > Programmierung > BattClock [ - Search - New posts - Register - Login - ]


.
Masthead | Privacy policy | Netiquette | Advertising | Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved.
.