Graniczna prędkość machania LPT - Page 2

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Polish to

Threaded View
Re: Graniczna prędkość machania LPT
Quoted text here. Click to load it

Jesteś w stanie ocenić ten narzut? czy HAL w tym wypadku nie robi po
prostu outb->real_outb ? Bo tutaj traci się za dużo mocy procesora i
prędkośc tej operacji prawie nie zalezy od predkości CPU.

Re: Graniczna prędkość machania LPT
Sebastian Biały schrieb:
Quoted text here. Click to load it

w zależności od implementacji jaja może być dużo. Kompletne przełączenie
kontekstu z user na kernel i na oborot trochę może potrwać, rzędu
kilkadziesiąt ns do pojedynczych mikro-s. Możesz poszukać jakiegoś
rt-kernela, ale tu chyba nie będzie szybciej, ale za to z definiowalnym
opóźnieniem. Wszystkie SO multitasking lepiej sobie radzą z pakietami
danych: sterownik operuje bezpośrednio na nóżkach, a dane dostaje (i ew.
wysyła) w pakietach. Wtedy ograniczasz zmiany kontekstu do minimum.
Spróbuj napisać mały sterowniczek z twoim programem i zobacz ile
hardware naprawdę może. Albo ściągnij sobie free-dos z sieci i
przetestuj na real-mode w DOSie.
Aha, USB też pracuje najlepiej przetwarzając dane pakietami, więc dużo
chyba nie zyskasz, oprĂłcz tego, Ĺźe USB ma teraz kaĹźda husteczka do nosa,
a LPT jest dinozaurem ;-).

Waldek

Re: Graniczna prędkość machania LPT
Quoted text here. Click to load it

Jak znajdę gdzieś TurboC w wygodnej wersji to z ciekawości sprawdze.

Quoted text here. Click to load it

Ja mam wlasnie pakietowo - najczęsciej to dane SPI. Jesli tylko scalak
bedzie w stanie mi przygarnąć cała ramkę i wypluć ją na SPI to luksus.

Re: Graniczna prędkość machania LPT
Sebastian Biały schrieb:
Quoted text here. Click to load it

no to spróbuj z driverem Linuxowym. Tu ło masz artykuł:
http://www.freesoftwaremagazine.com/articles/drivers_linux

Na stronie 11 jest listing drivera LPT. Musisz go przerobić tak, by brał
twój cały pakiet i wypluwał za jednym zamachem. A najpierw zrobić tylko
driver testowy, ktĂłry przy init_module startuje mruganie a przy
exit_module zwalnia port.

Waldek

Re: Graniczna prędkoœć machania LPT
On Fri, 14 Aug 2009 11:02:07 +0200,  Waldemar Krzok wrote:
Quoted text here. Click to load it

Mysle ze ograniczenie jest sprzetowe i nawet driver nie pomoze.

Ewentulanie korzysta on z mozliwosci ECP/DMA i czysto programowo nie
zadziala.

No ale z ciekawosci sprobowac mozna.

J.


Re: Graniczna prędkość machania LPT
Quoted text here. Click to load it
Tutaj masz dr dosa i kupe narzędzi, wypal płytke i testuj :)
http://www.hirensbootcd.net /


--
-----
Pozdr
We've slightly trimmed the long signature. Click to see the full one.
Re: Graniczna prędkość machania LPT
On Thu, 13 Aug 2009 17:52:53 +0200, Waldemar Krzok napisał:
Quoted text here. Click to load it

Ale on macha nóżką, przez outb(). Problemem jest tutaj scheduler.
Jasne że lepiej i bez niepotrzebnego czekania można to zrobić w przestrzeni
jądra.

--
begin 755 signature.exe
[tomek <at> sikornik <dot> net]                             vy 73! de SP9UOB
We've slightly trimmed the long signature. Click to see the full one.
Re: Graniczna prędkość machania LPT

Quoted text here. Click to load it

dawno nie ogladalem zrodel Linuxa, ale w Unixie outb powodowalo exeption,
ktore bylo przechwytywane i dopiero w kernelu mapowane na "prawdziwe" outb.

Waldek


Re: Graniczna prędkość machania LPT
Quoted text here. Click to load it

http://sebobialy.net/lcd.tar.gz (3.4kB)

To źródlo produkuje 290kHz na mojej płycie. Procesor >2GHz wiec to nie to ;)

Uruchamiać jako root bo używa ioperm.

Re: Graniczna prędkość machania LPT
Sebastian Biały pisze:
Quoted text here. Click to load it

Zrobiłem test na WinXP. Taki program:

int _tmain(int argc, _TCHAR* argv[])
{
    HANDLE h = CreateFile(L"\.\giveio", GENERIC_READ, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if(h == INVALID_HANDLE_VALUE) {
        printf("GiveIO not installed\n");
        return 1;
    }
    CloseHandle(h);

    printf("Generuje\n");

    while(1){
        _outp(0x378, 0xFF);
        _outp(0x378, 0x00);
    }

    return 0;
}

Wygenerował mi częstotliwość 400kHz, co daje zmianę stanu co 1,25us.

Re: Graniczna prędkość machania LPT
Quoted text here. Click to load it

Mi wygenerowal 290kHz :D

Wygląda na to że:

a) mam badziewny hardware
b) hal-e windowsa i linuxa są identyczne :)
c) czas kupić coś na USB

Re: Graniczna prędkość machania LPT
Quoted text here. Click to load it

Ciekawostka: caly zakres niskiego IO powoduje jakies powaşne opóźnienia.
Gdzie bym nie robił outb tam zawsze jest poczekalnia. Czas czekania jest
różny, akurat LPT ma najwiekszy, ale nie udało mi się wyjśc poza 1 mln
outb/sek testujac parenaście portów (zajetych i wolnych).

Hmm, czy ISA emuluje sie obecnie na I2C :P ?

Re: Graniczna prędkoœć machania LPT
On Fri, 14 Aug 2009 11:55:03 +0200,  Sebastian Biały wrote:
Quoted text here. Click to load it

Nie, po prostu ISA tak spowalniana byla. Byc moze nadal chipset
spowalnia na wszelki wypadek, mimo ze juz nawet ISA nie obsluguje :-)

Za to ciekawe co jest z reszta - brak spowalniania, czy moze system
operacyjny odmawia dostepu, co mu szybko idzie :-)

J.




Re: Graniczna prędko�ć machania LPT
Quoted text here. Click to load it

Czekaj, o ile minie pamięć nie myli w ISA mozna było wciskać bajty z
prędkością 8MHz. Nijak to nie pasuje, tutaj mamy jakies 20x wolniej.

Jak znajde jakis mały hdd to postaram się zapuscić freedosa + tc i
pobawić się.

Quoted text here. Click to load it

Prawdopodobnie dlatego teĹź, Ĺźe output z LPT widziany na oscyloskopie
przy tych 290kHz przypomna morze w czasie sztormu, oscylacje na zboczach
mają 1.5V (!). Pewno przy 1MHz miałbym sinusa 5MHz :). Nie chciało im
się tego prostować, to zrobili HALT i już ... ;)

Re: Graniczna prędko?ć machania LPT
On Fri, 14 Aug 2009 14:10:01 +0200,  Sebastian Biały wrote:
Quoted text here. Click to load it

8MHz to bylo w najszybszych trybach, 8-bitowy out trwal wiele cykli.
Blizej 1us.

Quoted text here. Click to load it

dyskietke jeszcze masz ? :-)

J.


Re: Graniczna prędko?ć machania LPT
Quoted text here. Click to load it

Hmmmm pamiec nie ta, ale może.

Quoted text here. Click to load it

A czy DOS + TC wchodził na 1.44 ?

Re: Graniczna prędko?ć machania LPT
On Fri, 14 Aug 2009 15:42:27 +0200,  Sebastian Biały wrote:
Quoted text here. Click to load it

Ktorys wczesny chyba nawet na 360.

Ale w sumie to Ty chcesz prosty program wygenerowany, nie TC.

Mozna tez przygotowac CD startujacego i kopiujacego do ramdysku ..

J.





Re: Graniczna prędko?ć machania LPT
Quoted text here. Click to load it

Ok. Coś tam wymyślę. Jestem bardzo ciekaw, ale musze znaleźc troche
czasu i nerwów zeby zajmowac się znowu "systemami operacyjnymi" CP/M
yyy, znaczy ... MSDOS.

Re: Graniczna prędko?ć machania LPT
Quoted text here. Click to load it

Oj dlaczego od razu MS do tego mieszać! :)

Dyskusja mnie na tyle zaciekawiła, że sam przeprowadziłem test.
W QuickBASIC'u napisałem następujący programik:

  DIM x AS LONG
  DIM StartTime AS DOUBLE
  DIM EndTime AS DOUBLE
  StartTime = TIMER
  FOR x = 1 TO 2000000
    OUT &H378, 1
    OUT &H378, 0
  NEXT x
  EndTime = TIMER
  PRINT "Przeprowadzono 2'000'000 cykli w czasie: "; EndTime - StartTime; "s"
  PRINT "Szybkosc: "; 2000000 / (EndTime - StartTime) / 1000; "KHz"

Wynik jaki otrzymałem to 332KHz. Procesor Pentium III. Wynik jest niezależny
od tego, czy załaduję EMM386 czy nie (spodziewałem się spowolnienia z EMM386,
a tu nic...). :-)

Pozdrawiam,
Mateusz Viste

Re: Graniczna prędko?ć machania LPT
Quoted text here. Click to load it

Nie musi. Program napisz i skompiluj w DOSemu, a na dyskietkę wrzuć tylko
gotowy programik + jądro FreeDOS'a z interpreterem komend. :)

Pozdrawiam,
Mateusz Viste

Site Timeline