C-ben program futás késleltetés

 ( Jedite | 2005. január 20., csütörtök - 10:45 )

C-ben program futás késleltetés

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

[quote:64c7a4f0e3="meditor"][quote:64c7a4f0e3="thuglife"]Nem csak hogy hardwarefuggo, hanem szinte portolhatatlan. -> ***** megoldás.
Ezen kivul meg azt szeretem amikor valaki bepasteol egy code reszletet ami csak linuxon fog mukodni holott a kerdezo vilagban nem kozolte hogy milyen platformra kodol.[/quote:64c7a4f0e3]

Talán nem kéne fikázni másnak a segítőkészségét. Aki feltette a
kérdést, majd eldönti hogy segítettem-e neki, vagy sem. Lehet, hogy portolhatatlan, de megmutat egy utat, miként lehet 10 msec-nél
finomabb időzítést csinélni. RTCchip minden x86-os gépben
van, ha valaki akarja közvetlenül, kapuírással és olvasással
is lekódolhatja (befűzzem ezt is?). Azonkívül a bemutatott kód egy
bárhová átvihető ALGORITMUST is ismertet, függetlenül a
hardvertő, és a programnyelvtől.

Úgyhogy hátrébb az agyarakkal, uram.[/quote:64c7a4f0e3]
Amit mondtam fenntartom. Szar megoldasokkal senkit nem lehet kisegiteni

[quote:5e7e7fcdfe="thuglife"]
Amit mondtam fenntartom. ***** megoldasokkal senkit nem lehet kisegiteni[/quote:5e7e7fcdfe]

A te fenti jótanácsod biztos nagyon sokat segített az kérdezőnek.

[quote:e7776d7b05="thuglife"]Nem csak hogy hardwarefuggo, hanem szinte portolhatatlan. -> ***** megoldás.
Ezen kivul meg azt szeretem amikor valaki bepasteol egy code reszletet ami csak linuxon fog mukodni holott a kerdezo vilagban nem kozolte hogy milyen platformra kodol.[/quote:e7776d7b05]

Valóban, igazad van, hogy a kérdező nem mondta, hogy milyen platformon akar programozni, akár hardver, akár szoftver-szinten. De a megoldás is jó, hiszen nyugodt szivvel feltételezhetjük, hogy a legelterjedtebb hardver-architekturán (x86), és a legelterjedtebb nyilt-forráskódú platfomon akar programozni (Linux), mert ha nem így lenne, valószinűleg kiírta volna a kérdező. És bár valóban jó a platformfüggetlen programozás, de Neki nem feltétlenül erre van szüksége.

Konklúzió: Én is az usleep () használatát javaslom puszta egyszerűség és átláthatóság miatt, és az általa adott pontosságnál nagyobb ritkán kell. De ettől még nem feltétlenül rosszabb a másik megoldás.

Mijau. Én így gondolom... :)

[quote:fac1c6f530="thuglife"]Nem csak hogy hardwarefuggo, hanem szinte portolhatatlan. -> ***** megoldás.
Ezen kivul meg azt szeretem amikor valaki bepasteol egy code reszletet ami csak linuxon fog mukodni holott a kerdezo vilagban nem kozolte hogy milyen platformra kodol.[/quote:fac1c6f530]

Most ez teljesen lényegtelen, hogy milyen platform. Itt megoldást kértem a bajaimra. Amire kaptam is! :o
Az, hogy melyik milyen platformon működik az mindegy, mert nem hiszem, hogy teljesen azt a kódot fogom felhasználni, amit kaptam.
De nekem eszembe sem jutott ilyesmi. Legalább tudom, hogy ilyen is van. És ettől nem szenvedett senki hiányt és én sem lettem emberi értékeimben kevesebb.
A kritikád erős volt és fölösleges, mert ezzel egyáltalán nem építettél semmit a dolgon. Előted már mások elmondták, hogy vigyázni kell vele.
Meg ha tényleg annyira szar volna azaz RTC akkor nem volna benne a kernelben a támogatása nemdebár?!
Mindennek megvan a maga fontossága az életben.
Bár a kritikádnak is megvolt a maga lényege, akkor is úgy gondolom, hogy más hangnemben (egy kicsit ésszerűbben) sokkal emészthetőbb lett volna.
Utólag meg, csak akkor írnám oda, hogy milyen platform, ha tényleg valami különlegesre írok valamit. Vannak dolgok amik alapból kikövetkeztethetők.

De most már mindegy, amit kértem megkaptam. És a fentiekkel, ha valamiben megsértettelek akkor bocsánatot kérek. Nem reméltem, hogy ilyenbe fog átcsapni egy egyszerű kérdés.

Csak annyit tennék hozzá, hogyha valaki komoly fejlesztést végez,
az nem tehet mást, mint, hogy maximálisan figyelembe vesz azt
a környezetet, ahol a fejlesztés végeredménye futni fog.

Az usleep jó (én is rengeteget használom), viszont az RTC nélkül
nem tudnék bizonyos feladatokat megoldani. Nem értem, hogyha
egyszer ottvan egy hardverelem a gépben miért bűn az, ha
jelenlétét figyelembe vesszük.

Hozzáteszem: az időzítés kérdése az egyik legfontosabb, ha
nem a legfontosabb kérdés a számítástechnikában. ezt kb 20 éves
programozói. tapasztalat mondatja velem. Ha egy fejlesztés
során sikerült eldönteni, hogy egy esemény a másikhoz képest
mikor következik be, illetve meg tudod helyesen méretezni az
adatforgalmat, akkor gyakorlatilag megoldottad a problémát, ettől
kezdve favágás az egész.

Na erről ennyit, részemről lezártnak tekintem az ügyet.

Üdv mindekninek!

A problémám a következő:
Keresek olyan függvényt, ami befolyásolja a program végrehajtási sebességét. Valami olyasmire gondolok mint a sleep, csak sajna azzal az a baj, hogy int egész számot fogad és az 1 mp az már nekem túl hosszú idő. Úgyhogy valami olyasmi kéne, ami enged, tized, vagy század másodperces késést.

Segítséget előre is köszi!
:o

usleep(3)

[quote:a2e50e3492="thuglife"]usleep(3)[/quote:a2e50e3492]

Ezer hála. :D
Ez tökéletes lesz.

[quote:de5514f486="Jedite"][quote:de5514f486="thuglife"]usleep(3)[/quote:de5514f486]

Ezer hála. :D
Ez tökéletes lesz.[/quote:de5514f486]

Lehet sokkal finomabban is az RTC-ről: 1/8192 sec.
Én ezzel csinálom a mintavételezést, ha méréstechnikáról van
szó.

Az usleep-pel az a baj hogy 10 msecnél kisebbet nem tudsz
vele késleltetni, hiába adod be mikrosec pontossággal az időt.
A normál felhasználói programokban, azonban ez tökéletesen
elég.

[quote:301c11e6c7="meditor"]

Lehet sokkal finomabban is az RTC-ről: 1/8192 sec.
Én ezzel csinálom a mintavételezést, ha méréstechnikáról van
szó.

Az usleep-pel az a baj hogy 10 msecnél kisebbet nem tudsz
vele késleltetni, hiába adod be mikrosec pontossággal az időt.
A normál felhasználói programokban, azonban ez tökéletesen
elég.[/quote:301c11e6c7]

Hmm ez se hangzik rosszúl .
Bár nem értem, hogy pontosan hogy lehet azt használni. Odáig rendben, hogy megnyitom egy open() függvénnyel. :?
Ha el tudnád mondani a részletek (csak röviden) azt megköszönném.

[quote:24aceec562="Jedite"][quote:24aceec562="meditor"]

Lehet sokkal finomabban is az RTC-ről: 1/8192 sec.
Én ezzel csinálom a mintavételezést, ha méréstechnikáról van
szó.

Az usleep-pel az a baj hogy 10 msecnél kisebbet nem tudsz
vele késleltetni, hiába adod be mikrosec pontossággal az időt.
A normál felhasználói programokban, azonban ez tökéletesen
elég.[/quote:24aceec562]

Hmm ez se hangzik rosszúl .
Bár nem értem, hogy pontosan hogy lehet azt használni. Odáig rendben, hogy megnyitom egy open() függvénnyel. :?
Ha el tudnád mondani a részletek (csak röviden) azt megköszönném.[/quote:24aceec562]

Szerintem az usleep () elég lesz Neked. Már csak azért is, mert a másik problémásabb, és kissé nehezebben is használható...

[quote:6db34a4843="Jedite"]

Hmm ez se hangzik rosszúl .
Bár nem értem, hogy pontosan hogy lehet azt használni. Odáig rendben, hogy megnyitom egy open() függvénnyel. :?
Ha el tudnád mondani a részletek (csak röviden) azt megköszönném.[/quote:6db34a4843]

Mellékelek egy kódot.

ReadRTC: addig vár, amig nem jön egy rtc megszakítás.
(a várakozás ideje alatt a proci pihizik.)
ha már volt ilyen az utolsó lekérdezés óta, akkor visszaadja
a megszakítások darabszámát.

OpenRTC/CloseRTC nyit csuk.

SetRTC beállít egy számlálót (kettőt lehet: EXT és SAMP)
GetRTC megmondja, hogy egy beállított számláló lefutott-e.

root-ként 8 khz-cel tudsz menni mezeiként 1/64 secundumonként
van megszakításod. A /proc könyvtárban nyomon tudod követni
az eseményeket. Egynél több rootprocesszt nem futtathatsz,
mert segfault-tal kivág.

További részletek a kerneldokban.
Én 2.4.26 alól így használom:

//----------------------------------------------------------------------------------------------
#ifdef MDS_RTC

#define RTC_SAMP 0
#define RTC_EXT 1
#include <linux/rtc.h>
//----------------------------------------------------------------------------------------------
unsigned long int Rtc_Tmp,Rtc_SampTo,Rtc_ExtTo,Rtc_Samp,Rtc_Ext,Rtc_DSamp,Rtc_DExt;
int RtcFd;
//----------------------------------------------------------------------------------------------
unsigned long int ReadRTC(void)
{unsigned long int tmp,rtc_count;
rtc_count=0;read(RtcFd, &tmp, sizeof(unsigned long int));
if((tmp&255)==0xc0)rtc_count=tmp>>8;
return(rtc_count);
}
//----------------------------------------------------------------------------------------------
void OpenRTC(void)
{RtcFd=open ("/dev/rtc", O_RDONLY);ioctl(RtcFd, RTC_PIE_OFF, 0);
ioctl(RtcFd, RTC_IRQP_SET, 8192);ioctl(RtcFd, RTC_PIE_ON, 0);
Rtc_Tmp=Rtc_SampTo=Rtc_ExtTo=Rtc_Samp=Rtc_Ext=0;
ReadRTC();
}
//----------------------------------------------------------------------------------------------
void SetRTC(unsigned int wich, unsigned long len)
{switch(wich)
{case RTC_SAMP: Rtc_Ext+=ReadRTC();Rtc_SampTo=len;Rtc_Samp=0 ; break;
case RTC_EXT : Rtc_Samp+=ReadRTC();Rtc_ExtTo=(float)len*8.192;Rtc_Ext=0; break;
default : break;
}}
//----------------------------------------------------------------------------------------------
unsigned int GetRTC(void)
{unsigned int to;
to=0;Rtc_Tmp=ReadRTC();
Rtc_Samp+=Rtc_Tmp;Rtc_Ext+=Rtc_Tmp;
Rtc_DSamp=(Rtc_SampTo>Rtc_Samp)?Rtc_SampTo-Rtc_Samp:0;
Rtc_DExt=(Rtc_ExtTo>Rtc_Ext)?Rtc_ExtTo-Rtc_Ext:0;
if(!Rtc_DSamp)to|=1;if(!Rtc_DExt)to|=2;
return (to);
}
//----------------------------------------------------------------------------------------------
void CloseRTC(void){ioctl(RtcFd, RTC_IRQP_SET, 1024);ioctl(RtcFd, RTC_PIE_OFF, 0);close(RtcFd);}
//----------------------------------------------------------------------------------------------
#endif
//----------------------------------------------------------------------------------------------

Ezer köszönet mindenkinek.
Majd akkor még utánnanézek, ennek az RTC-s dolognak.
Köszi a kódot meditor. :wink:

Majd átnyálazom tüzetessen. :o

Az rtc-vel vigyázz, ha hordozható kódot akarsz, akkor felejtsd el :)

[quote:63e689dd4d="egmont"]Az rtc-vel vigyázz, ha hordozható kódot akarsz, akkor felejtsd el :)[/quote:63e689dd4d]

Ez így van. Hardverfüggő.

[quote:bc38c63187="meditor"][quote:bc38c63187="egmont"]Az rtc-vel vigyázz, ha hordozható kódot akarsz, akkor felejtsd el :)[/quote:bc38c63187]

Ez így van. Hardverfüggő.[/quote:bc38c63187]
OK

Megfogadom. :)

[quote:ae53bdbaa6="Jedite"][quote:ae53bdbaa6="meditor"][quote:ae53bdbaa6="egmont"]Az rtc-vel vigyázz, ha hordozható kódot akarsz, akkor felejtsd el :)[/quote:ae53bdbaa6]

Ez így van. Hardverfüggő.[/quote:ae53bdbaa6]
OK

Megfogadom. :)[/quote:ae53bdbaa6]

intel x86-on működik.

Nem csak hogy hardwarefuggo, hanem szinte portolhatatlan. -> szar megoldás.
Ezen kivul meg azt szeretem amikor valaki bepasteol egy code reszletet ami csak linuxon fog mukodni holott a kerdezo vilagban nem kozolte hogy milyen platformra kodol.

[quote:57cd638ad7="thuglife"]Nem csak hogy hardwarefuggo, hanem szinte portolhatatlan. -> ***** megoldás.
Ezen kivul meg azt szeretem amikor valaki bepasteol egy code reszletet ami csak linuxon fog mukodni holott a kerdezo vilagban nem kozolte hogy milyen platformra kodol.[/quote:57cd638ad7]

Talán nem kéne fikázni másnak a segítőkészségét. Aki feltette a
kérdést, majd eldönti hogy segítettem-e neki, vagy sem. Lehet, hogy portolhatatlan, de megmutat egy utat, miként lehet 10 msec-nél
finomabb időzítést csinélni. RTCchip minden x86-os gépben
van, ha valaki akarja közvetlenül, kapuírással és olvasással
is lekódolhatja (befűzzem ezt is?). Azonkívül a bemutatott kód egy
bárhová átvihető ALGORITMUST is ismertet, függetlenül a
hardvertő, és a programnyelvtől.

Úgyhogy hátrébb az agyarakkal, uram.