Krotkie odcinki czasu w PC

Pisal moze ktos w asm 86 procedurke, która odmierzala krotkie odcinki czasu < 1 ms ? Oczywiście chodzi o PCty. Konkretnie chodzi o wystawianie na złaczu RS odpowiednich stanów w określonym czasie.

Reply to
Kris
Loading thread data ...

Kris napisał(a):

Pod DOS-a nie powinno być problemu, trzeba tylko dobrać opóźnienie dla konkretnej częstotliwości procesora.

Reply to
Maksymilian Dutka

Użytkownik Maksymilian Dutka napisał:

Witam W swoich programach "zatrudniałem" do tego celu timer systemowy 8254 zaszyty w chipsecie płyty głownej. jest to o tyle lepsze rozwiązanie, że czas nie zależy od prędkosci procesora. Metoda ta też nieźle sprawdza się w windowsach z serii 9x

Reply to
Grzegorz Kurczyk

Grzegorz Kurczyk napisał(a):

Ale poniżej 1ms to tak nie zajdziesz.

Reply to
Maksymilian Dutka

Pod win2k można robić pętelkę zależną od wyniku funkcji QueryPerformanceCounter. I liczyć na to że Twoje zadanie nie zostanie w brutalny sposób przerwane. Poniżej 1ms się da spokojnie.

TP.

Reply to
Tomasz Piasecki

Niestety - nawet w czasie dzialania procesu z priorytetem Real Time, niewywlaszczanego - kursor sie rusza a system na pingi odpowiada :-(

J.

Reply to
J.F.

NO ja się z tym zgadzam, pod windą nigdy nie da się odmierzyć dokładnie jakiegoś odcinka czasu. Niemniej jednak używam tej funkcji do mierzenia czasu jakiś czynności - transferu DMA czy coś. Rozdzielczości są tu rzędu dziesiątek mikrosekund OIDP.

TP.

Reply to
Tomasz Piasecki
Reply to
Piotr Wyderski

Nie zakładaj, że się nie da, jeżeli się da.

Kwestia tylko wiedzy i czasu, który trzeba na to poświęcić. Polecam rozpoczęcie zabawy z Windows 2000/XP DDK. Z nim da się zrobić prawie wszystko, włącznie ze sterownikami blokującymi proca w 100% dla siebie na prawie dowolny czas.

Reply to
Adam Dybkowski

Użytkownik Maksymilian Dutka napisał:

A niby czemu nie ? Na upartego to i 1us się odmierzy, ale nie będzie to już zbyt dokładne (tzn trzeba troszkę pokombinować)

Reply to
Grzegorz Kurczyk
Reply to
Piotr Wyderski

Trzeba sobie kupic peceta z dwoma procesorami :-)

Ale to sie da napisac o bardzo duzej ilosci systemow i komputerow. W zasadzie to znam tylko jeden ktory to w miare potrafil - transputery. Nawiasem mowiac - przy zegarze 2GHz przelaczenie procesow powinno sie udac w czasie ok 1us :-)

O przepraszam - czemu ? Moze miec klopoty z odbieraniem danych z RS, ale poza tym powinien dzialac w miare dobrze ..

J.

Reply to
J.F.

Dziekuje za wszystkie odpowiedzi.

Na pocztaku tez myslalem o wykorzystaniu 8254. Aplikacja ma dzialac pod Windows. Chyba pozostaje jakis maly atmelek podlaczany na COM i wymiana informacji z nim.

Pytanie do Adama: Jak to rozwiazałes w swoim programie ISP Programmer? Prawdę mówiąc piszę coś bardzo podobnego. Edytor do asemblera i chciałem z nim zintegrować programator ISP. Obecnie mam to zrobione tak że z poziomu edytora wywołuję program dosowy z odpowiednimi parametrami i wszystko gra ale chciałbym to zrobić jako jedną aplikację.

Reply to
Kris

Nijak bo problemu nie ma. Ze względu na działające inne procesy programowanie może być (i jest w rzeczywistości) wstrzymywane - i nie wynika z tego żaden problem. Co najwyżej taktowanie na ISP będzie znacznie wolniejsze, ale dla programowanych uC nie ma to najmniejszego znaczenia, czy SCK ma 100 kHz, czy 10 Hz. Z drugiej strony, dostępy do portu równoległego i tak są bardzo wolne (minimum kilkaset us, mierzyłem to jakiś czas temu w WinXP).

BTW: Porównywałem ostatnio szybkość programowania ATmega128 przez ISP i przez JTAG - protokół niby podobny, kabelek (LPT) i soft (własny) również, ale JTAG jest znacznie szybszy. Wynika to pewnie ze sposobu przepychania danych do programowanego uC, bo czas programowania (fizycznego) jednej strony pamięci Flash jest stały niezależnie od metody.

Reply to
Adam Dybkowski

Mam rozumiec, ze jesli bede pisał program w asmie i linijka pod linijka umieszcze rozkazy przykładowo utaw SCK i wyzeruj SCK przez odwolanie sie do portów (gdzie sck to jeden z bitów LPT) to ta zmiana nastapi po czasie minimum kilkaset us?

To po co w takim razie opcja wyboru kwarcu w twoim programie?

A z tym JTAGiem to ciekawa sprawa.

Reply to
Kris

Tak to wyglada w Windows XP. Nie wiem, z jaka predkoscia wynik dzialania instrukcji 'out' propaguje sie na port w DOSie.

Bo nie moge polegac na aktualnym "widzimisie" Windozy (a moze i calego peceta - sprawdzal ktos ile trwa 'out' na LPT w czystym DOSie?). Opoznienia czasowe opieram na funkcji QueryPerformanceCounter. Wprowadze w przyszlosci mozliwosc wylaczenia dodatkowych opoznien, jezeli to mialoby przyspieszyc programowanie.

Poza tym mozesz zachciec popedzac AVRa np. z zewnetrznego generatora 100 kHz albo kwarcu 32,768 kHz - wtedy miedzy kolejnymi zboczami transmisji ISP trzeba nieco wiecej poczekac.

Reply to
Adam Dybkowski

Nie wiem jak by to wyszlo na wspolczesnych maszynach :) jak robilem myki w czasach AT to lpt zawsze rzadzilo sie tymi samymi prawami co ISA - czyli takt 8MHz z mozliwoscia podkrecenia w chipsecie.

W miare stabilny transfer ok 1kHz mozna uzyskac synchronizujac sie w watku instrukcja sleep

repeat sleep(1); // zawiesza dzialanie watku na 1ms cos_do_portu index_i_warunek_konca until 1=0;

Oczywiscie w odrebnym watku i oczywiscie jesli nie ogladasz jednoczesnie filmu z divxa

Dla wiekszych predkosci kombinowalem kiedys z funkcja testujaca inkrementacje licznika w petli w czasie 1 sec wyznaczonej przez zegar systemowy aby wyznaczyc sredni czas trwania watku bez opoznienia - ale nie skonczylem tego wiec nie wiem jak to zadziala.

Jeszcze jedna uwaga odnosnie programu dosowego w sesji windowsa - koniecznie trzeba dla niego stworzyc pifa i wylaczyc w nim wykrywanie bezczynnosci - jesli windows stwierdza ze dosowy program nie korzysta z myszy ani z klawiatury to system traktuje go jako nic nie robiacego i odebiera mu przydzielony czas !

wojtek

formatting link

Reply to
neuron

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.