← Back to team overview

sslug-teknik team mailing list archive

Re: C-kode til læsning på parallelporten + bash random-funktion

 

In <000001bf62d9$5fe2fd40$4796fea9@ks> "Kristian Sørensen" <kristian.s@xxxxxxxxxx> writes:

>Vi har nogle fotoceller, hvor vi gerne vil have vores program, som er
>skrevet i C til at læse på porten, og ved at cellen aktiveres, skal
>programmet så gå videre, og sætte en bit (som fx starter en pumpe). Vi har i
>øjeblikket én parallelport i men vil have to mere sat i på et tidspunkt.

>Er der nogen der ved hvordan man læser på porten?

Direkte adgang til hardware fra et program er almindeligvis ikke muligt
i Linux - normalt bliver hardware styret af kernen, så en mulighed er
at skrive et lille kerne-modul som understøtter nogle ioctl() kald, der
implementerer det som i vil gøre. I kerne-modulet kan I så bruge inb()
og outb() funktionerne (eller inw/outw og inl/outl hvis det er words
eller longs i skal læse/skrive).

Hvis I vil lave det i et almindeligt program (det er vanskeligere at
styre timingen fra et almindeligt program) skal I kalde funktionen
ioperm() først, for overhovedet at få adgang til at læse/skrive 
til porten. Se "man ioperm()" - det kræver bl.a. at jeres program
kører med root-privilegier.

>gentaget... det kalder vi random når andre hører det :-) MEN hvordan laves
>det i bashscript random altså. Vi har ikke kunne finde noget om det.

>Det vi vil er fx at definere et interval for pauser fx fra 1-10 sekunder.
>Hvorefter et tilfældigt tal udvælges til sleep$.

En mulighed er at læse en byte fra /dev/urandom (leverer pseudo-random
bytes) eller /dev/random (ægte random bytes, men I kan risikere at 
læsningen blokerer fordi der ikke er mere tilfældighed at tage af).
Den byte konverteres så til et tal i det interval, I skal bruge.
Noget i retning af

   od --read-bytes=1 -d /dev/urandom | cut -c13

(kan sikkert laves bedre, men fortolkningen af output fra filen 
vil jeg lade jer om).

-- 
Henrik Storner     | "Software engineering is a race between engineers 
<storner@xxxxxxxx> |  who try to create foolproof software and the 
                   |  universe which is trying to create bigger fools.
                   |  So far, the universe is winning..."


References