Portál AbcLinuxu, 11. května 2024 01:03


Dotaz: Resetátor pro paralelní port Wdt1LPT a pascal

4.9.2006 14:28 kamil5 | skóre: 2
Resetátor pro paralelní port Wdt1LPT a pascal
Přečteno: 449×
Odpovědět | Admin
Mam takovy problem Zkousim rozchodit resetator pro LPT Prelozil jsem jadro s podporou LPT Povolil v setupu biosu Prikaz dmesg|grep parport me ukaze tohle

parport0: PC-style at 0x278 (0x678) [PCSPP,TRISTATE,EPP] parport0: irq 5 detected lp0: using parport0 (polling). Snad to znamena ze LPT je funkcni .. Na strankach vyrobce jsem stahl program v Pascalu

Na preklad jsem pouzil Free Pascal Compiler version 1.9.4 [2004/08/12] for i386

a soubor pokus.pas s obsahem dole jsem prelozil

USES PORTS;

var a:byte;

begin

a:=port[$378]; { precte stav portu, adresa $378 plati pro LPT1 }

a:=(a xor 1) or 254; { bit d0 invertuje, ostatni bity do log.1 }

port[$378]:=a; { ulozi novou hodnotu do portu }

end.

Přeloží se uspesne, ale pri spusteni to spadne s chyb. hlaskou debian:~# ./pokus Runtime error 216 at $08049F1F $08049F1F $0804A81F $0805B217

Nevite, kde by mohla byt chyba ? Diky moc za radu
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

4.9.2006 14:46 hm
Rozbalit Rozbalit vše Re: Resetátor pro paralelní port Wdt1LPT a pascal
Odpovědět | | Sbalit | Link | Blokovat | Admin
hm, pouštíte to jako root?

a ještě přihodím něco podobného v c-éčku...
5.9.2006 08:47 kamil5 | skóre: 2
Rozbalit Rozbalit vše Re: Resetátor pro paralelní port Wdt1LPT a pascal
Prekompiloval jsem jadro nahodil jen modul modprobe parport_pc Pak jsem poupravil ten priklad a zda se ze to uz s resetatorem komunikuje.

#define BASEPORT 0x3bc /* lp0 */ atd ..
4.9.2006 14:48 petr_P
Rozbalit Rozbalit vše Re: Resetátor pro paralelní port Wdt1LPT a pascal
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zaprve bych vyhodil modul lp, ktery ti ten parport0 uspesne okupuje, pak bych se ujistil, ze ten program poustit pod rootem (nebo mas k nemu prava) a taky bych mozna zkusil novou verzi FPC (na konci srpna vysla 2.0.4).

A taky prohledat fora, protoze tady varim z cisty vody a pristupovat na I/O porty z pascalu jsem v Linuxu nikdy nezkousel.
4.9.2006 15:49 kamil5 | skóre: 2
Rozbalit Rozbalit vše Re: Resetátor pro paralelní port Wdt1LPT a pascal
Spoustim to jako root Jak mam vyhodil modul lp ? Dik
4.9.2006 20:25 Jirka | skóre: 36
Rozbalit Rozbalit vše Re: Resetátor pro paralelní port Wdt1LPT a pascal
modprobe -r lp

Viz. man modprobe a jeste pomoci lsmod si vypises moduly nactene v kernelu.
5.9.2006 02:05 Marble | skóre: 27 | blog: marble
Rozbalit Rozbalit vše Re: Resetátor pro paralelní port Wdt1LPT a pascal
Spusti pod rootem samo o sobě nestačí. Je potřeba si ještě říct o přístup na port pomocí ioperm(). To platí pro program v C. Netuším, jestli si to FreePascal řeší sám nějak jinak, ale v každém případě pro přístup k portu z userspace root nestačí. Je ještě potřeba někde nějak explicitně povolit (anebo si napsat místo userspace programu jednoduchý modul do jádra :).
5.9.2006 03:32 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Resetátor pro paralelní port Wdt1LPT a pascal
A nebo to udělat slušně a použít funkce operačního systému.
Quando omni flunkus moritati
5.9.2006 08:35 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Resetátor pro paralelní port Wdt1LPT a pascal
FP FAQ:
Accessing I/O ports

With versions before 0.99.10: if you're under DOS you can use the outport* and inport* procedures of the go32 unit.

Since version 0.99.8, the Port array is supported like in TP, as long as you use the ports unit in your program (not available under Win32).

I/O port access is possible under Linux, but that requires root privileges. Check the manuals for the IOPerm, ReadPort and WritePort procedures. (Unit Linux)
5.9.2006 08:59 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Resetátor pro paralelní port Wdt1LPT a pascal
Odpovědět | | Sbalit | Link | Blokovat | Admin
Opravdu nechci nějak kritizovat, ale psát v pascalu program, co běží jako root a šahá na porty, které jádro již obsluhuje je dost nešťastný postup.
Ale k věci: aby mohl program přistupovat k portům, tak musí předtím zavolat ioperm, což nevím, jak se v Pascalu dělá. Dej na abclinuxu hledat "ioperm" a dozvíš se ledacos. Psal jsem o tom třeba tyhle příspěvky:
http://www.abclinuxu.cz/forum/show/33111#25033
http://www.abclinuxu.cz/forum/show/111551#4
Další věcí je to, že když už chceš přímo šahat na porty, tak se vůbec nemusíš starat o to, jak jádro nadetekuje parport0 - stejně mu budeš fušovat do řemesla. Takže podporu paralelního portu z jádra raději úplně vyhoď.
Mimochodem, resetátor na paralelní/sériový port je hrozně jednoduchá věc s pár součástkami a desetiřádkovým obslužným programem.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.