Autor Thema: Problem mit Zeitmarke  (Gelesen 6201 mal)

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« am: 19. February 2005, 01:43 »
hallo,

ich hab in meinem system (written in ASM) eine variable "millisecs", die speichert, wie viele millisekunden das system schon an ist. die is dazu gut, dass ich zeitfunktionen (delay) einbauen kann. allerdings hab ich ein altes problem: es geht nicht. wundert mich, muss was ganz banales sein:


irq0x00:
;timer-irq
push ds
push eax
mov eax,dssys-GDT
mov ds,eax
mov eax,[millisecs]
add eax,0x05
mov [millisecs],eax

mov esi,init_ok
mov ebx,0x00FF0000
call PrintString                 ;dies hier ist temporär zum testen, ob
call UpdateScreen            ;das int aufgerufen wird!

mov al,0x20
out 0x20,al
out 0xA0,al
pop eax
pop ds
iret  


ich habs auch schon so versucht:


irq0x00:
;timer-irq
push ds
push eax
mov eax,dssys-GDT
mov ds,eax
add dword [millisecs],0x05

mov esi,init_ok
mov ebx,0x00FF0000
call PrintString                 ;dies hier ist temporär zum testen, ob
call UpdateScreen            ;das int aufgerufen wird!

mov al,0x20
out 0x20,al
out 0xA0,al
pop eax
pop ds
iret  


geht aber auch nicht... dann hab ich geschaut, ob der fehler vll. bei meinem delay is, was ich einfach getestet hab, indem ich in die hauptschleife öfters mal ne phrase "mov eax,[millisecs]" reingemacht hab, die dann mit bochs angesteuert und die werte ausgelesen. der wert ist immer 0x0F, was auch komisch is, weil die var mit 0x00 initialisiert wird... würde mich freuen, wenn jemand den fehler findet. danke,

J!N
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #1 am: 19. February 2005, 14:15 »
okay, jetzt gehts!
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

BigOlly

  • Beiträge: 88
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 19. February 2005, 14:27 »
Und lässt Du uns teilhaben woran es lag? ;-)
====================================================
Zitat: "Es ist schwierig zu antworten, wenn man die Frage nicht versteht."
(würde mich ja mal interessieren ob jemand weiß woher dieser Satz stammt...)

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #3 am: 19. February 2005, 14:37 »
jo, es ging, wie es sollte, nur ich hab mich vertan. die ersten "mov eax,[millisecs]" lagen hinter einer grafikausgabe, die scheinbar 15ms braucht, deshalb stand es da auf 0x0f und danach die phrasen waren so nah zusammen, dass sich der wert nicht veränderte...  :oops:
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #4 am: 19. February 2005, 15:01 »
Liegt auch mit daran dass deine Zeitauflösung nur ein Fünftel einer Sekunde beträgt^^ Wäre es genau hättest du es wahrscheinlich eher gemerkt^^
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #5 am: 19. February 2005, 15:07 »
Zitat von: Roshl
Liegt auch mit daran dass deine Zeitauflösung nur ein Fünftel einer Sekunde beträgt^^ Wäre es genau hättest du es wahrscheinlich eher gemerkt^^


warum sollte sie? mein PIT ist auf 200 hz programmiert, was wohl eher 5 ms beträgt...  und das is ja net soo ungenau.
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #6 am: 19. February 2005, 16:33 »
Nene so meinte ich's nicht, wenn du den PIT auf 200Hz hast ist das schon richtig, habe nix anderes beuhaupten wollen.
Was ich meine ist folgendes:
Wenn du den PIT z.B. auf 1000Hz hast, dann würdest du jede Millisekunde erhöhen können und nicht nur alle 5^^
So ist der Zeitabstand zwischen den einzelnen Aktualisierungen kleiner, und da wäre dann vielleicht der PIT in deinen nachfolgenden Phasen dazwischengekommen, dann hätteste also gemerkt, dass er funktioniert hat^^
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #7 am: 19. February 2005, 20:05 »
Zitat von: Roshl
Nene so meinte ich's nicht, wenn du den PIT auf 200Hz hast ist das schon richtig, habe nix anderes beuhaupten wollen.
Was ich meine ist folgendes:
Wenn du den PIT z.B. auf 1000Hz hast, dann würdest du jede Millisekunde erhöhen können und nicht nur alle 5^^
So ist der Zeitabstand zwischen den einzelnen Aktualisierungen kleiner, und da wäre dann vielleicht der PIT in deinen nachfolgenden Phasen dazwischengekommen, dann hätteste also gemerkt, dass er funktioniert hat^^


jo, aber ich mache damit auch meinen taskswitch und naja... 1 ms pro task is dann nicht gerade sinnvoll, man braucht auch immer ein ausgewogene zeitspanne, sonst switcht mein OS mehr, als dass es ausführt. okay, das is da noch net der fall, da in ASM schon recht viel mit 1 ms machbar is, aber trotzdem.  :P
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #8 am: 20. February 2005, 11:28 »
Also ich habs auf 1ms^^
Wieviel letztendlich ausgeführt wird hängt von der Taktfrequenz ab^^
Ich mach meinen Task/Thread-switch auch da.
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

 

Einloggen