Portál AbcLinuxu, 1. května 2025 00:01
Nazdar.
Na muj, zde prezentovany (RTLinux a RTAI a Realtime preempt), Semestralni projekt tykajici se Real-Time Linuxu navazuje Bakalarska prace.
V ni bych mel dale rozvinout nabyte znalosti ze Semestralniho projektu. Mam za ukol vytvorit jednoduchy programek, ktery bude v pravidelnich intervalech na seriovem portu generovat jednicky a nuly.
Koukal jsem se na Serial programming HOWTO a neco jsem tam nasel, ale o programovani casovace v Linuxu toho google moc nevi a ja taky ne. Procitat drojaky se mi moc nechce, tak bych chtel nekoho, kdo v tom umi chodit, poprosit o pomoc.
Diky.
Tiskni
Sdílej:
setitimer()
. Předtím se ale musí nastavit reakce na signál (pro časovač reálného času) SIGALRM, který časovač generuje. Bližší informace - viz "man setitimer
".
Není to ale v žádném případě "realtime". Při nezatíženém systému závisí zpoždění na hodnotě HZ nastavené při kompilaci jádra, u současných jader (HZ=250) to dělá přes 4 ms (může to být i méně - pokud zrovna běží stejný proces -, ale počítat se musí s touto hodnotou). Při velké zátěži to ale může být i mnohem víc.
BUGS The current implementation of nanosleep() is based on the normal kernel timer mechanism, which has a resolution of 1/HZ s (i.e, 10 ms on Linux/i386 and 1 ms on Linux/Alpha). Therefore, nanosleep() pauses always for at least the specified time, however it can take up to 10 ms longer than specified until the process becomes runnable again. For the same reason, the value returned in case of a delivered signal in *rem is usually rounded to the next larger multiple of 1/HZ s.Přitom by nebyl problém nemít systémový časovač s pevnou periodou, ale vždy se v irq handleru podívat kdy je potřeba probudit další proces, a případně přeprogramovat časovač na kratší než obvyklou hodnotu. Linux saje :(
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.