TCH (statz) | #1, Főfasz (10443) |
4853 | #29b4 | ^ | Idézet | Fri, 03 Jan 2014 23:12:28 +01 |
31.46.*.* | *.catv.pool.telekom.hu |
Akkor hova lett Flood3r és Prometheus csomagja? Itt senki nem mondta, hogy a vám által felbontott csomag a posta hibája. Értem, akkor ezekre is van valami "gyorstalpalód"? (Tuti lesz.) ?m=0&o=8969&c=1 ?m=0&o=9569&c=1 Viszont a javaslatod a menetközbeni újramérésről szöget ütött a fejembe, hogy hátha mégis lehet. És rájöttem, hogy lehet, csak kicsit másképp, mint ahogy te javasoltad. Ha az utasításfeldolgozásnál - ahol az adott utasítás utáni várakozás van - mérem ki, hogy mennyi idő telt el a várakozás alatt (2-7 µs), akkor amennyiben eltérést észlelek, akkor tudok korrigálni. Nem a timert írtam át, mert a timerben menetközben nem lehet mérni, hanem menetközben belekotrok a ciklusszámlálóba. Beleraktam az időzítőt, ami elméletileg 1000 ns alatt 0.7-et késik, viszont ez ugye üres forciklusban volt. Az utasításfeldolgozásban kimértem és loggoltam, hogy mennyi és mekkora eltérés van. Nagyjából 5%-nyi volt, cca. minden 20. µsec után késett egyet, 5655 ciklusra ~300 ciklusnyi késés jutott. Mondanom sem kell, ez így még baromira nem volt elég, hiszen ez egy perc alatt már három másodpercnyi késést jelentene! Ezután beraktam a két mérőpontot az utasításfeldolgozóba, majd az elágazást, hogy ha a várt és a mért érték között eltérés van, akkor az eltérés 8x-osát vonja ki a számlálóból. (A különbség előjeles, tehát ha nem késik, hanem siet, akkor negatív számot von ki, azaz hozzáad.) Ezzel a pillanatnyi eltéréseket sikerült nagyjából a negyedére (1-2%-ra) csökkenteni: már csak minden ~80. µs után késik vagy siet egyet; eddig csak késett, de mivel most már felváltva késik és siet, ezért a teljes eltérést sikerült gyakorlatilag nullára redukálni. (Tetszőleges számú ciklusra (értsd: 0-∞) jut 0-5 ciklusnyi eltérés.) A teljes szinkronnal tehát tökéletesen meg vagyok elégedve, tényleg "teljes szinkron". A pillanatnyi szinkron a maga 1-2%-os eltérésével már-már kielégítőnek mondható, majd még próbálok finomhangolni rajta, de gyanítom, hogy ez már nem fog bezavarni az időzítésbe, nem hinném, hogy létezne C64-re olyan lemeztöltő rutin, aminek az időzítője annyira ki van centizve, hogy még az is bezavarna, hogy usque 80 ciklusra jut egy ciklusnyi eltérés. Kösz a tippet, majd ha megvan a ware, akkor beleraklak a thxlistába. Viszont a timeren sikerült még egy picit optimalizálni, pontosabban felvettem még egy timeval-t, hogy a két fpgettimeofday() semmi más ne legyen, csak amit mérni kell. Tudom triviális, de eddig valahogy nem esett le. :P Itt a - remélhetőleg végleges - timer: unit cusleep_lib; interface var cusleep_time: longint; procedure cusleep(usec: longint); procedure init_cusleep; implementation uses unix; procedure cusleep(usec: longint); assembler; label l0; asm {$ifdef cpu386} movl usec, %eax movl cusleep_time, %ecx mul %ecx xorl %ecx, %ecx l0: incl %ecx cmpl %eax, %ecx jne l0 {$endif cpu386} {$ifdef cpux86_64} movl usec, %eax movl cusleep_time, %ecx mul %ecx xorl %ecx, %ecx l0: incl %ecx cmpl %eax, %ecx jne l0 {$endif cpux86_64} {$ifdef cpupowerpc} ld r1, 0(usec) ld r0, 0(cusleep_time) mul r0, r0, r1 xor r1, r1, r1 l0: addi r1, r1, 1 cmp cr0, 1, r0, r1 bne cr0, l0 {$endif cpupowerpc} end; procedure init_cusleep; var bt: int64; tv, tv2: timeval; i: longint; label l0; begin fpgettimeofday(@tv, nil); asm {$ifdef cpu386} xorl %eax, %eax xorl %ecx, %ecx l0: incl %ecx cmpl %eax, %ecx jne l0 {$endif cpu386} {$ifdef cpux86_64} xorl %eax, %eax xorl %ecx, %ecx l0: incl %ecx cmpl %eax, %ecx jne l0 {$endif cpux86_64} {$ifdef cpupowerpc} xor r0, r0, r0 xor r1, r1, r1 l0: addi r1, r1, 1 cmp cr0, 1, r0, r1 bne cr0, l0 {$endif cpupowerpc} end; fpgettimeofday(@tv2, nil); bt := tv2.tv_sec * 1000000 + tv2.tv_usec; cusleep_time := ($100000000 div (bt - (tv.tv_sec * 1000000 + tv.tv_usec))); for i := 1 to 1000000 do begin cusleep(1); end; fpgettimeofday(@tv, nil); cusleep_time := cusleep_time - ((((tv.tv_sec * 1000000 + tv.tv_usec) - bt) - 1000000) div 1000); end; end. http://hup.hu/szavazasok/20140103/szukseg_lenne-e_szerinted_magyar_szakszervezetre_a_sw_mernokok_szamara XDDDDDDDDDDD |