Jak in?ynier Windowsa programowa?

Transkrypt

Jak in?ynier Windowsa programowa?
Publikacja z serwisu Linux.pl
http://www.linux.pl
Jak inżynier Windowsa programował...
Wielu ludzi tęskni za czasami, kiedy na pecetach królował MS DOS. System ten był bardzo ubogi w porównaniu z
dzisiejszymi wersjami Windows. Nieistniejąca strona graficzna, żałosny system plików, konieczność wprowadzania komend z
konsoli, słowem koszmar dla typowego użytkownika.
DOS miał jednak coś czego próżno szukać we współczesnych produktach Microsoftu: prosty i bezpośredni dostęp do portów.
Ileż to urządzeń można było wysterować z peceta poprzez port szeregowy! Prosty programik w pascalu i już silnik krokowy w
laserze przesuwał siatkę dyfrakcyjną, dwie godziny pracy i już interferometr przesyłał dane na komputer.
Każdy z odrobiną zacięcia inżynierskiego mógł szybko i tanio zmusić komputer do harówki w pokoju hobbysty albo w
laboratorium naukowym.
DOS’a już nie ma. Laboratoria zostały. Dzisiaj wprawdzie sprzęt laboratoryjny jest dostarczany razem z odpowiednim
oprogramowaniem pod Windows XP lub Vistę, ale co to za laboratorium naukowe, którego potrzeby może przewidzieć
programista z drugiego końca świata i to kilka lat naprzód?
Doświadczalnik ma dziesiątki pomysłów miesięcznie, które trzeba na bieżąco sprawdzać eksperymentalnie. Często
oznacza to niestandardowe zastosowania sprzętu, którym dysponuje. Czasami potrzeba zmodyfikować
oprogramowanie. Co wtedy?
Ja mówię KLAPA!
Oprogramowanie jest zamknięte i wgląd w kod źródłowy ma tylko producent. Proszę spróbować go namówić, żeby szybko i
za darmo dostosował je do naszych potrzeb.
No cóż, przynajmniej można sprawdzić czy ma poczucie humoru ...
Dla większości użytkowników posługiwanie się tzw. czarnymi skrzynkami czyli zamkniętym oprogramowaniem ma same
zalety. To jednak nie dotyczy inżynierów ani naukowców.
I tutaj przedstawię jak to było z uruchamianiem karty pomiarowej w laboratorium Instytutu Fotonowego. Karta pomiarowa to
urządzenie, które połączone z komputerem zbiera dane z jakiegoś detektora.
Na początku kupiliśmy bogato wyposażoną kartę renomowanego producenta
z oprogramowaniem pod Windows. Dużo pieniędzy, mizerny efekt.
Oprogramowanie oczywiście niewystarczające dla naszych potrzeb, nauka API i pisanie własnych programów – kilka
tygodni. A na koniec szumy i zakłócenia samej karty tak duże, że sygnał z detektora był bezużyteczny.
Wtedy wpadliśmy na genialny pomysł: Zróbmy własną kartę pomiarową! Przecież to proste. Wystarczy kilka części
elektronicznych. Zamiast wpychać kartę pod obudowę komputera, gdzie zakłócenia są duże, dołóżmy jej interfejs USB i
wystawmy całą na zewnątrz. Dodatkowo będzie można ją używać z laptopa! Hurraaa! Do roboty!
No i faktycznie. Po kilku tygodniach prototyp karty był gotowy. Karta dosyć szybka, trzeba odbierać kilka megabajtów
danych na sekundę. Ale przecież USB 2.0 obsługuje do 60MB/s.
Odpalamy urządzenie pod Windows XP. Działa ślicznie. Jest sygnał, szumy malutkie, transfer wystarczający, ale jakieś
rytmiczne skoki ... hmmm w sygnale. Pewnie błąd w naszej aplikacji albo coś w laboratorium zakłóca kartę. Bliższe
spojrzenie na zebrane dane, i o zgrozo... są dziury! Część danych nie dotarła do komputera.
Okazało się, że obsługa USB w Windows ma przerwy w transferze danych. Jeśli dane nie są gromadzone na karcie to taka
przerwa oznacza ich bezpowrotną stratę.
Trochę głupia sprawa. Potrafiliśmy zbudować kartę pomiarową, a nie potrafimy jej oprogramować. Ludzie po doktoratach,
komputerowi guru ... eech.
page 1 / 2
Publikacja z serwisu Linux.pl
http://www.linux.pl
W odruchu rozpaczy chcieliśmy nawet zapłacić profesjonalistom od sterowników pod Windows, aby nam pomogli. Kilka
miesięcy poszukiwań i żaden nie potrafił tego zrobić. Wglądu w kod źródłowy Windows XP oczywiście nie ma.
Rozbudowywanie tak szybkiej karty o dodatkowy bufor pamięci jest trudne, drogie i bez sensu. Przecież na przyłączonym
komputerze jest wystarczająco dużo taniej pamięci, wystarczy ją wykorzystać.
Sytuację uratował Linux.
Zajęło mi dwa tygodnie intensywnego szukania w google i przeglądania źródeł kernela, żeby nauczyć się pisania modułów
linuksowych, zrozumieć sposoby obsługi USB i wreszcie napisać własny moduł, który nie tylko nie gubił danych z naszej
karty pomiarowej ale jeszcze osiągał transfer 80 MB/s, o 20MB/s więcej niż maksymalny dopuszczalny dla USB 2.0.
To było na wiosnę 2008. Teraz jesteśmy chyba jedynym na świecie producentem kart pomiarowych dedykowanych pod
Linuksa.
W naszym laboratorium nie ma już ani jednego peceta z Windows. Wszystkie są okupowane przeróżnymi
dystrybucjami Linuksa do testowania uniwersalności naszego oprogramowania.
Zbigniew Karkuszewski
[email protected]
www.instytutfotonowy.pl
page 2 / 2