[OSy] Nestihajici zapsani CP0 compare registru
Martin Decky
decky at d3s.mff.cuni.cz
Tue Nov 2 14:00:17 CET 2010
Hezky den,
priste bych prosil psat podobne dotazy prednostne do konference ..
> Takze sa mi stane, ze nastavim compare na 43907 ale count uz je 44010
> napriklad. Tento delay v mojom kode som metodou try&fail odhadol na 200
> tickov a jednoduchy patch je samozrejme nastavit ten compare o 200
> tickov dalej v adekvatnych pripadoch.
Asi nezbyva nez cely ten algoritmus udelat robustne. Stejne se musite
probouzet periodicky z duvodu planovani, takze v planovaci muzete
otestovat, zda od posledniho pruchodu timery nejake nahodou nevyprsely,
aniz by se provedly, a primo je provest nebo oznacit k provedeni (podle
toho, v jakem kontextu obsluzne rutiny casovacu provadite).
> Otazka moja je (ktoru neviem z manualov vycitat), je moznost (a ako)
> priamo nastavit IP7 bit v kode (pri zakazanych interruptoch), takze by
> sa hned ako povolim interrupty vyvolal interrupt 7 a handlovanie
> timerov?
Ne, bit IP7 programove nastavit nelze, muze to udelat pouze procesor sam
pri rovnosti Count a Compare registru. Uvedomte si ale, ze muzete
nastavovat nejen hodnotu registru Compare, ale take hodnotu registru
Count, takze vzdy, kdyz potrebujete naplanovat dalsi probuzeni, tak
muzete zajistit, ze Count < Compare.
> Minimalne by som sa zbavil nejakeho 200 tick delayu, samozrejme timery
> by tam pretekali aj tak: ked raz niekto zavola timer_start(1 usec)
> tak sa moze aj na kolomaz rozliat a nestihnem ho zobudit za jednu
> mikrosekundu. Ale bolo by to aspon pekne.
Probuzeni presne za 1 usec neni rozhodne nutne, zadani to nepozaduje a
pochopitelne to v non-RT systemu ani nemuzete nijak garantovat. Obsluzna
rutina timeru by se nemela zavolat drive nez po vyprseni timeoutu, ale
pokud se zavola v rozumne dobe po vyprseni, vse je OK.
Planovaci kvantum urcite odpovida definici "rozumne doby".
M.D.
More information about the NSWI004
mailing list