Fjollet tsleep()?

From: Valery Kotchiev (none@aggregator--nospam.dk.lh.bsd-dk.dk)
Date: Tue 05 Mar 2002 - 10:37:43 CET


Date: Tue, 5 Mar 2002 10:37:43 +0100
From: Valery Kotchiev <none@aggregator--nospam.dk.lh.bsd-dk.dk>
To: bsd-dk@bsd-dk.dk
Subject: Fjollet tsleep()?

Hej
Jeg prøver at skrive en driver til min tv-korts (bktr) fjernbetjening,
hvor man skal polle ved kortet GPIO port og se om "data venter" bit er
sat.

Porten kan desværre ikke hive interrupts og jeg har derfor valgt enten
at lade et brugerprogram polle i en løkke med nogle sleeps imellem eller
en kernemodul som også poller porten i en løkke med tsleep() kald.

Mit problem er af et eller mærkellig grund bliver "data venter" statusbit
ikke sat hvis man afgiver processoren med tsleep() i kernetilstanden
eller sleep() i brugertilstanden.
Faktisk oscillerer bitværdien frem og tilbage som om der er noget som
nulstiller den før driveren når at opdage det. Så hvis man fyrer
fjernbetjeningsknapperne for vildt af, kan man godt nå at fange
"bitværdien" og dermed få udlæst data.

Statusbit bliver først sat ordentligt hvis man bruger en stram løkke i
kernetilstanden uden at afgive processoren men ved brugen af DELAY(),
som selvfølgeligt ikke er særligt smart da hele maskinen låser
mens løkken kører.

Jeg har disassemblet windowsdrivere og fået styr på hvordan
fjernbetjeningen fungerer under windows og havde endda verificeret det
med en systemdebugger.
Desuden har jeg også kigget på Linux IR project (www.lirc.org) som er en
generel infrarød driver til linux og som har support for mange
forskellige drivere til fjernbetjeninger (også dem med GPIO).. og jeg
kan ikke se noget forksel på den måde jeg håndterer hardwaren i FreeBSD
og hvordan de håndterer det i Linux og i Windows.

    Problemet:
Så problemet må ligge i den sjove måde BSD håndterer kerne-sleep kald
på. Der findes nemlig ingen "linux-ekvivalent" måde at lade et process
sove på.. I linux kan man nemlig sætte et antal jiffies til man skal
vækkes og reschedule() derefter...

-- 
_________________________________________________________________________
 Valery Kotchiev                  http://diku.dk/students/valery/pgp.key
 Computer Science / Chemistry student                     valery@diku.dk
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Feel free to contact me (flames about my english and the useless of this
driver will be redirected to /dev/null, oh no, it's full...).
(Michael Beck, describing the PC-speaker sound device)



This archive was generated by hypermail 2b30 : Wed 15 Nov 2006 - 18:24:19 CET