Autor: Tomasz Slodkowicz (slodki_at_infoserv.ii.uj.edu.pl)
Data: Mon 08 Jan 1996 - 16:47:38 MET
Mam nadzieje ze ktos potrafi pomoc...
Jest takie polecenie dla dyskow IDE ktore powoduje zwrocenie informacji o
danym dysku.
Jezeli dany dysk faktycznie istnieje to wszystko jest ok.
Ale co ciekawe dany dysk nie musi byc skonfigurowany (ani CMOS, BIOS itp)
aby zdobyc o nim informacje- wystarczy aby byl fizycznie podpiety.
Mozna to w dosc ciekawy sposob wykorzystac - zamiast zapisywac parametry
fizyczne dysku na papierze - po prostu uruchomic program. Szczegolnie dzis,
kiedy twarde robia za miekkie ;)
I tu pojawil sie problem.
pisze sobie procedurke, zgodnie z zaleceniami wg schematu czekam az
sterownik bedzie wolny, wpisuje parametry do portow, wysylam rozkaz, czekam
az sie wykona...
Jezeli dysku nie ma, to niestety sie nie wykona - ok.
Chce wiec ustawic sobie timeout i jesli nie przyjdzie po jakims czasie to
zglosic...
Ale nie ma lekko. W normalnej pracy w porcie statusu sa : 50h - na "dzien
dobry"- wszystko ok., potem wpisuje parametry - dalej 50h - ok., potem
wysylam kod rozkazu - pojawia sie 8Xh - ustawia sie pare rzeczy, w tym flaga
BUSY. Czekam wiec - w prostszej wersji po prostu na zmiane flag w porcie,
lub na przerwanie - w tym momencie najczesciej flaga BUSY znika i dalej
czeka w postaci 50h....
Jezeli jednak nie ma fizycznie podpietego HD to wszystko podobnie do momentu
wpisania do odpowiedzniego rejestru numeru dysku - od tego momentu w
statusie ustawiana jest flaga BUSY (+inne, wyglada to EFh lub FEh - nie
pamietam...) i ......
Rozumiem ze sterownik moze sprawdzac dysk jeszcze przed wykonaniem polecenia
(tzn w momencie wpisywania parametrow), choc w doc mam napisane, ze
wykonanie zaczyna sie w momencie wpisania rozkazu...
W czym problem?
ano ze status (BUSY) sie po tym nigdy nie zmienia... !
Tzn gdy dalem sobie timeout=inf to program po prostu wisi(BUSY=1).
Natomiast jezeli wykryje to, to program sie konczy(dalej BUSY=1), po czym
jakiekolwiek dzialnie na dysku (fizyczne - bez cache itp oczywiscie) powoduje
czasowa przerwe w pracy (tak ok. 30-60s) czekania na dysk, po czym wszystko
rusza.
Widzialem dzialajacy progam robiacy to co chce, tzn. po pewnym czasie (z
zegarkiem w reku 8s) zglaszal timeout a po jego pracy nie bylo "zwisu" na
twardzielu przez dluzszy czas, ale kaszanil na dysku - tzn. np. zamazywal
sektor (np. katalog :(((( .....
Niestety nie wiem co on robi - po disasebml. wyglada strasznie...
Czy wiec komus udalo sie elegancko rozwiazac ten problem ?
Jak to ugryzc ?
jak po wykryciu timeoutu (tzn. nie ma fizycznego dysku) przywrocic normalny
stan sterownika? (jak wspomnialem po ok minucie sam wraca do pracy, ale w
DOSIE, w moim programie ciagle BUSY=1) - myslalem o resecie sterownika, ale
czy mozna zapisywac nowy rozkaz, gdy BUSY ????
No, napiszcie cos....
Tomek
-- Tomasz Slodkowicz Institute of Computer Science Jagiellonian University, Cracow, Poland e-mail: slodki_at_ii.uj.edu.pl www : http://www.ii.uj.edu.pl/pl-none/~slodki
To archiwum zostało wygenerowane przez hypermail 2.1.7 : Tue 18 May 2004 - 12:38:26 MET DST