Sei sulla pagina 1di 6

Ing.

Gabriele MONTI 2011-13

I/O in C e linguaggi derivati

www.ingmonti.it

I/O in C e C#
ra i linguaggi di !rogramma"ione ad #alto# livello di a$tra"ione% il linguaggio C & $en"'altro (uello !i) a ba$$o livello. *$$endo nato !er $+rivere un ,i$tema O!erativo1% deve avere i$tru"ioni +-e +on$entano di intervenire .a+ilmente $ui regi$tri dei di$!o$itivi di I/O. /ue$te i$tru"ioni $ono $tate +on$ervate an+-e nei linguaggi derivati dal C. 0n+-e $e & !i) im!robabile +-e linguaggi +ome 1ava o C2 vengano utili""ati !er e..ettuare l'I/O ad alta velo+it3 ri+-ie$to dai !i) moderni di$!o$itivi in.ormati+i% l'I/O in 1ava o C2 !otr3 e$$ere utile !er i di$!o$itivi !i) lenti o !er (uelli #a$tratti# .orniti dal ,i$tema O!erativo.

1.1

Istruzioni di macchina IN e OUT e linguaggi "C like"


I ,i$temi O!erativi moderni -anno la #!rote"ione dell'I/O#. /ue$to $igni.i+a +-e $e un !rogramma diver$o dal ,i$tema O!erativo tenta di .are una i$tru"ione di ma++-ina IN o O4T% e$$o verr3 ine$orabilmente terminato dal ,i$tema O!erativo. /ue$to & !o$$ibile utili""ando l'-ardware della C54. In.atti i mi+ro!ro+e$$ori attuali -anno la !o$$ibilit3 di interrom!ere il .un"ionamento di un (ual$ia$i !rogramma% in +orri$!onden"a di determinati eventi% e .are in modo +-e venga e$eguito il ,i$tema O!erativo. 5er .are (ue$ta .un"ione viene .atto u$o del $i$tema delle #e++e"ioni della C54#% oltre +-e del $i$tema dei livelli di $i+ure""a della C54. *ntrambi i $i$temi vengono de$+ritti in maggiore dettaglio in altra !arte di (ue$to te$to. In tutti i mi+ro!ro+e$$ori moderni utili""ati nei ,.O. di ti!o general !ur!o$e% & !re$ente un $i$tema di ge$tione di #livelli di autori""a"ione# della C54. Ogni !rogramma% mentre & in e$e+u"ione% & in un ben determinato livello di autori""a"ione 6#ring#7. I livelli di autori""a"ione $ono almeno due% ma !o$$ono e$$ere an+-e di !i). ,e il $i$tema -a $olo due livelli% (ue$ti $i !o$$ono +-iamare #utente#% e #$u!ervi$ore#. Il livello utente & #!rotetto#. In (ue$to +a$o e$i$tono me++ani$mi -ardware/$o.tware +-e !ermettono alla C54 di +edere direttamente il +ontrollo al ,i$tema O!erativo% $e $i veri.i+ano +ondi"ioni anomale nel .un"ionamento del $o.tware% (uali !er e$em!io l'a++e$$o a lo+a"ioni di memoria #vietate# o l'e$e+u"ione di i$tru"ioni di I/O. Nel livello di autori""a"ione #$u!ervi$ore# & inve+e !o$$ibile e..ettuare ogni i$tru"ione e modi.i+are ogni lo+a"ione di memoria. 8un(ue% $e un !rogramma +-e $ta girando +on diritti di #utente# e$egue una IN od una O4T% $i determiner3 automati+amente l'e$e+u"ione di una e++e"ione da !arte della C54% .un"ione +-e .a !arte del ,.O.9 il ,.O. !rovveder3 alla +-iu$ura del !rogramma #o..endente# 6u$+ir3 una Me$$age:o;% +on una $+ritta del ti!o #*rrore di !rote"ione nell'I/O. Il !rogramma & $tato +-iu$o#7. 8un(ue al giorno d'oggi !er !oter .are le i$tru"ioni IN o O4T nei !rogrammi% & ne+e$$ario +-e il relativo !rogramma giri +on diritti di $u!ervi$ore. Nel +a$o del ,.O. <indow$ +i= & !o$$ibile $+rivendo un #driver# !er di$!o$itivo. I driver $ono di .atto e$ten$ioni del ,.O. e girano +on i diritti di $u!ervi$ione. *' +om!li+ato $+rivere un driver !er di$!o$itivo% !er+-> e$$o deve ri$!ettare una !letora di re(ui$ti% !er !oter .un"ionare.

1.1.1

Inpout32

4n a!!ro++io alternativo +on$i$te nell'utili""are librerie +-e +ontengano .un"ioni +-e u$ano le i$tru"ioni IN e O4T e .ar girare $olo la libreria +on diritti di $u!ervi$ore. 5er e$em!io la 8?? #In!out32#% +-e $i !u= trovare in rete% mette a di$!o$i"ione due .un"ioni9 In67 e Out67% +-e altro non .anno +-e e$eguire le due i$tru"ioni di ma++-ina IN e O4T. ?e .un"ioni In67 e Out67 -anno le $eguenti $inta$$i9
byte In(short IndirizzoDiIO)

?a .un"ione In67 !rende +ome uni+o !arametro l'indiri""o a 1@ bita da u$are nell'i$tru"ione di ma++-ina IN 0?% 8A 68A indiri""o di 1@ bit7. In67 re$titui$+e un bBte% +-e & il valore di (uanto $i & a+(ui$ito all'e$terno% dal !ort di I/O all'indiri""o #Indiri""o#.
void Out(short IndirizzoDiIO, byte valoreInUscita)

?a .un"ione Out67 non deve re$tituire nulla 6& void7 ed a++etta +ome !arametri l'indiri""o da 1@ bit 6$-ort7 ed il :Bte da mettere in u$+ita $ul !ort indi+ato dall'indiri""o.

4ni;

21a IC0 in C e C2.odt

Der. 0.E.0 2012-10-2F

!. 1 di @

Ing. Gabriele MONTI

www.ingmonti.it

1.2

Istruzioni utili per l I/O in C e nei linguaggi deri!ati


Dalide an+-e !er 1ava e C2.

1.2.1

Scrittura dei numeri binari in basi diverse da 2

In C $tandard non e$i$te una $inta$$i !er indi+are +-e un numero & ra!!re$entato in nota"ione binaria. 5er (ue$to i numeri binari $i $+rivono di $olito in e$ade+imale% +onvertendoli a mente dal binario. 5er indi+are +-e una +o$tante numeri+a intera & $+ritta in e$ade+imale% la $i .a !re+edere in C dal !re.i$$o #0;# 6"ero% ; o A7. 5er i numeri ottali% meno +omuni al giorno d'oggi% dato +-e le C54 $ono a G% 1@% 32% @H bit% & !revi$ta l'utili""a"ione del !re.i$$o #0o# 6"ero% o minu$+ola7 *$em!io9
int numeroExa = 0xF104; int numeroOct = 0o740; /* corrisponde a 1111 0001 0000 0100 */ /* corrisponde a 111 101 001 */

1.2.2

Mascheramenti in ingresso

I ma$+-eramenti $i .anno +on le $te$$e .un"ioni bit !er bit de$+ritte !er il linguaggio 0$$emblB nel Ca!itolo

I% !aragra.o 2 #I$tru"ioni !er la mani!ola"ione dei bit 6bitwi$e o!eration$7#. 5er .arli in C e nei $uoi derivati% ba$ta a!!li+are la $inta$$i del linguaggio.
/uando & ne+e$$ario $a!ere $e uno o !i) dei bit di un numero & uno o "ero% $i deve u$are la .un"ione logi+a 0N8% a!!li+ata bit !er bit 6bitwi$e7. ?a 0N8 bitwi$e% in C e nei $uoi derivati% & e$!re$$a dalla $ingola J 6am!er$and7. *' im!ortante .ar notare +-e u$are la do!!ia am!er$and & $bagliato. In.atti JJ in C & l'o!eratore di +ongiun"ione logi+a +-e viene u$ato !er la valuta"ione della verit3 delle e$!re$$ioni logi+-e% !er e$em!io nelle e$!re$$ioni delle i. 67% e NON .un"iona in modo bitwi$e. 4$arlo darebbe dun(ue ri$ultati $bagliati. ?a .un"ione J dun(ue #re$etta#% +io& mette 0 nei bit in +ui +'& 0 nella ma$+-era. Con 0N8 +an+elleremo tutti i bit +-e non +i intere$$ano% e la$+eremo inalterati $olo (uelli +-e +i intere$$ano.

"N# $%& per cancellare i 'it che non interessano e mantenere solo (uelli necessari

Tecnica di programmazione per i mascheramenti in ingresso

5er $a!ere $e uno $!e+i.i+o bit & 1% $i metteranno a "ero tutti gli altri +on una J% $e il ri$ultato & "ero vuol dire +-e il bit da veri.i+are era "ero% $e il ri$ultato & diver$o da "ero% vuol dire +-e (uel bit era 1. ,e !er e$em!io vogliamo vedere $e il $e+ondo bit !i) $igni.i+ativo di un bBte & "ero o!!ure 1 dovremo .are +o$K9
// vedere se il bit di peso 7 della variabile "lettura" 1 o 0 // supponiamo c e !"#E sia de$inita precedentemente% come s ort e c e // conten&a l'indiri((o di )/O del circuito di )/O c e ci interessa // le&&iamo ora la variabile "lettura" da )nput b*te lettura = )n+!"#E,; b*te tutti0-ranne)l.io = lettura / 0x40; // masc era 0100 0000 // ora tutti0-ranne)l.io vale 0 se nel bit c e mi interessa // c'era 0% vale 0x40 se nel bit c e mi interessa c'era 1 // 0er cui1 i$ +tutti0-ranne)l.io 2= 0, 3 /* codice da ese&uire se c'era 1 */ 4 else 3 /* codice da ese&uire se c'era 0 */ 4

?a $te$$a +o$a $i !u= .are +on meno i$tru"ioni di +odi+e% an+-e $e diventa meno +-iara.
// vedere se il bit di peso 7 della variabile c 1 o 0 b*te lettura = )n+!"#E,; i$ ++lettura / 0x40, 2= 0, 3 /* codice da ese&uire se c'era 1 */ 4 else 3 /* codice da ese&uire se c'era 0 */ 4 Dolendo $i !u= .are tutto in una $ola i$tru"ione i.% ma il !rogramma diventa o$+uro9 i$ ++)n+!"#E, / 0x40, 2= 0, 3 /* codice da ese&uire se c'era 1 */ 4 else 3 /* codice da ese&uire se c'era 0 */ 4

!. 2 di @

2012-10-2F

21a IC0 in C e C2.odt

Ing. Gabriele MONTI 2011-13

I/O in C e linguaggi derivati

www.ingmonti.it

*' im!ortante notare +-e la i. deve +ontrollare $e il ri$ultato del ma$+-eramento & zero o!!ure $e NON zero. NON $i deve +ontrollare $e il ri$ultato & 1% !er+->% do!o un ma$+-eramento +on la J% nella variabile +-e -a #$ubito# il ma$+-eramento o +'& "ero o +'& la ma$+-era 6!rovare !er +redereL7. 5er (ue$to il +ontrollo +-e $ia 1 .un"iona $olo $e la ma$+-era & uno% e tutti gli altri +a$i generano un !rogramma $bagliato. 5er evitare (ue$ti errori% dun(ue% NON .aremo mai +ontrolli +on == 1% ma +on 2= 0% +ome nell'e$em!io !re+edente. *' !o$$ibile% an+-e $e molto meno +omune% .are il ma$+-eramento an+-e +on ma$+-ere +on !i) di un 1. In (uel +a$o $i trover3 $e uno /40?,I0,I dei bit indi+ati +on 1 nella ma$+-era & diver$o da "ero. *$em!io9 Mileva"ione del !rimo oggetto +-e !a$$a $u H traguardi otti+i +ollegati a +ia$+uno dei H bit meno $igni.i+ativi di un :Bte in ingre$$o.
// loop di pollin& c e attende c e almeno uno dei bit del port ad indiri((o !"#E // sia diverso da (ero 5 ile ++)n+!"#E, / 0x0F, == 0,;

Il +i+lo !re+edente -a un +or!o vuoto% ba$ta il te$tL ,e i (uattro bit +-e +i intere$$ano $ono tutti a "ero% $i +ontinua il +i+lo. ,i e$+e non a!!ena almeno uno dei bit diventa 1. /uando $i .anno ma$+-eramenti #in ingre$$o# $u dati !rovenienti dall'e$terno% non $ervono altre .un"ioni +-e la 0N8. 4$are le altre .un"ioni logi+-e $arebbe !i) +om!li+ato e di..i+ile% !er +ui9 NON u$iamoleL ,e $i u$ano te+ni+-e di I/O in !olling% & ne+e$$ario .are +i+li +-e +ontinuino ad interrogare i di$!o$itivi di I/O .ino a +-e non $u++ede (ual+o$a nel $i$tema da +ontrollare. Il modo !i) $em!li+e & de$+ritto nel $eguente e$em!io% in +ui di va a +ontrollare !ro!rio il bit dell'e$em!io !re+edente. *$em!io9
// loop di pollin& sen(a timeout // attendiamo c e il secondo bit pi6 si&ni$icativo diventi 1 5 ile ++)n+!"#E, / 0x40, == 0, 3 /* codice del loop di pollin&7 )l ciclo ese&ue $ino a c e il bit c e ci interessa non diventa 1 #e non c' altro da $are mentre si aspettare% il corpo del ciclo pu8 anc e essere vuoto */ 4

)olling in C e linguaggi deri!ati

1.2.3

Mascheramenti in uscita

I ma$+-eramenti in u$+ita $ono indi$!en$abili (uando & ne+e$$ario modi.i+are uno o !i) dei bit di un numero% la$+iando gli altri bit into++ati. *' una $itua"ione +-e a++ade abba$tan"a +omunemente% (uando i bit di un :Bte $ono u$ati !er !i) di un'u$+ita. ,!e$$o $i vuole modi.i+are uno o !i) bit in un +erto !unto di un !rogramma% mentre gli altri bit vengono modi.i+ati in altra !arte. ,e non $i !u= $a!ere e$attamente (uali valori $i !o$$ono mettere in OGNI bit del no$tro :Bte% non $i !u= .are a meno di .are un ma$+-eramento in u$+ita.

O* $+& per mettere a uno i 'it $"set"&

Come vi$to in altro +a!itolo del te$to% un ma$+-eramento +on OM modi.i+a il :Bte originale mettendo degli uno in tutti i bit +-e -anno uno nella ma$+-era e la$+iando il valore +-e +'era !rima nei bit dove +'& "ero nella ma$+-era. 8un(ue !er #a++endere# dei bit bi$ogna u$are OM 6N7. *$em!io9
// accende il primo e l'ultimo bit del !*te al port !"#E Out+!"#E% )n+!"#E, 9 0x:1,; // masc era in binario 10000001 /ue$ta i$tru"ione legge il :Bte dal !ort e !oi lo ma$+-era modi.i+ando $olo i bit +-e intere$$ano. 5er ultimo% +on la Out% mette il :Bte modi.i+ato in u$+ita. ?a In67 $u bit di u$+ita !otrebbe an+-e non .un"ionare 6ma an+-e $K..7. Ci= di!ende da +ome & .i$i+amente reali""ata l'elettroni+a dei bit di ingre$$o.

21a IC0 in C e C2.odt

Der. 0.E.0 2012-10-2F

!. 3 di @

Ing. Gabriele MONTI

www.ingmonti.it

?a .un"ione logi+a 0N8 bitwi$e mette "ero nei bit a "ero nella ma$+-era% la$+iando i bit +-e +'erano !rima dove +i $ono uno nella ma$+-era. 8un(ue !er #$!egnere# dei bit bi$ogna u$are 0N8 6J7. *$em!io9
// spe&ne il primo e l'ultimo bit del !*te al port !"#E Out+!"#E% )n+!"#E, / 0x7E,; // masc era in binario 01111110 /ue$ta i$tru"ione & analoga alla !re+edente% .a $olo il +ontrarioL Come $i vede% la ma$+-era ti!i+a +-e $i u$a !er $!egnere i bit +on la 0N8 & l'inver$o 6NOT7 della ma$+-era da u$are in una OM.

"N# $%& per mettere a zero i 'it $"reset"&

?a .un"ione AOM 6O7 u$ata nei ma$+-eramenti .a +ambiare il valore dei bit dove +'& uno% la$+iando uguali i bit dove +'& "ero. *$em!io9
// cambia il valore del primo e dell'ultimo bit del !*te al port !"#E Out+!"#E% )n+!"#E, ; 0x:1,; // masc era in binario 10000001 ?a ma$+-era !er lo AOM & la $te$$a dell'OM.

,O* $-& per commutare i 'it $"toggle"&

TO8O

".usione" di numeri 'inari con O* Tecnica di programmazione per i mascheramenti in uscita

/uando una !arte di +odi+e deve modi.i+are dei bit di un bBte% ma non !u= modi.i+arli T4TTI% !er+-> $ono gi3 $tati $i$temati da un'altra !arte del !rogramma e non !o$$iamo $a!ere $e $ono a uno o a "ero% allora non $i !u= .are a meno di ma$+-erare !rima dell'i$tru"ione di u$+ita 6O4T7. ?a te+ni+a di !rogramma"ione & (ue$ta9 1. 8e.iniamo una variabile 6Dalori4$+ite% nell'e$em!io $u++e$$ivo7 nella (uale manteniamo lo $tato di T4TTI i bit del :Bte +-e metteremo in u$+ita. 2. Modi.i+-iamo +on ma$+-eramenti i $oli bit di u$+ita della variabile de.inita !er le u$+ite 6Dalori4$+ite nell'e$em!io $u++e$$ivo7 3. 4$iamo !er .or"are le u$+ite% +on l'i$tru"ione O4T% solo e soltanto la variabile de.inita !er le u$+ite 5er u$are (ue$ta te+ni+a e..i+a+emente dovremo +ontrollare di u$are $em!re la variabile in tutte le Out67. 4n'i$tru"ione Out67 +-e .or"a$$e direttamente un numero .i$$o $ulla !orta di u$+ita rovinerebbe tutti i ma$+-eramenti .atti in !re+eden"a . *$em!io9
// tecnica di masc eramento per le uscite // supponiamo c e all'ini(io si debba spe&nere tutto b*te <alori=scite = 0; Out+)ndiri((o=scite% <alori=scite,; // $or(a i bit sul port $isico di uscita // ora i bit di <alori=scite sono tutti OFF 77 // se ora ci serve accendere il bit pi6 si&ni$icativo // ed il meno si&ni$icativo <alori=scite 9= 0x:1; // masc eramento con masc era binaria 1000 0001 = 0x:1 // ora% nei bit di <alori=scite% ci sono uno dove volevamo mettere 1 // tutti &li altri bit sono rimasti cos> com'erano prima7 // )l masc eramento a cambiato solo i bit della variabile "<alori=scite"% // per ora non a avuto nessun e$$etto sul mondo esterno al computer // per cambiare ?ualcosa all'esterno% devo $or(are i bit sul port // $isico di uscita% con una Out+,1 Out+)ndiri((o=scite% <alori=scite,; // solo dopo la Out i bit cambiano elettricamente sulla porta $isica% // modi$icando le tensioni elettric e presenti // sui piedini di uscita del circuito di )/O // se ora ci serve spe&nere il bit pi6 si&ni$icativo // ed il meno si&ni$icativo <alori=scite /= 0x7E; // la masc era 0111 1110 mette 0 nei bit // dove volevamo mettere 0 e lascia com'erano tutti &li altri bit // "--E@A)O@E1 la masc era per "@B il contrario della masc era per OC

!. H di @

2012-10-2F

21a IC0 in C e C2.odt

Ing. Gabriele MONTI 2011-13


Out+)ndiri((o=scite% <alori=scite,;

I/O in C e linguaggi derivati

www.ingmonti.it

// se ora ci serve cambiare il bit pi6 si&ni$icativo // ed il meno si&ni$icativo <alori=scite ;= 0x:1; // la masc era 1000 0001 cambia lo stato dei bit // c e volevamo cambiare e lascia com'erano tutti &li altri bit // "--E@A)O@E1 la masc era per DOC )BE@-)E" alla masc era per OC Out+)ndiri((o=scite% <alori=scite,; // $or(a i bit sul port $isico di uscita // se ora vo&liamo accendere tutti i bit di uscita% nulla ci // impedisce di $are cos>1 Out+)ndiri((o=scite% 0xFF,; // @O@ F"-EFO2 // ma ?uesta non una buona idea% perc G da ora il poi la variabile // <alori=scite non contiene pi6 lo stato esatto di ciascuno dei bit di uscita // per cui da ?ui in poi i masc eramenti su <alori=scite non anno pi6 senso2 // 0er mettere tutti i bit di uscita a 1 molto me&lio $are cos>1 <alori=scite = 0xFF; Out+)ndiri((o=scite% <alori=scite,;

1.2.4

Shift

5er e..ettuare $-i.t% in C $ono di$!onibili gli o!eratori PP e QQ% ri$!ettivamente !er le o!era"ioni di $-i.t a de$tra ed a $ini$tra. ,e il numero & $en"a $egno% lo $-i.t +orri$!onde $em!re alla molti!li+a"ione od alla divi$ione !er una !oten"a di due. *$em!i9
// s i$t in EH +si applica in modo simile anc e al E% dove peraltro // il tipo b*te non esiste77, b*te c = 1; b*te a = 4; a = +b*te, +a II c,; // s i$t a destra di 1 posto% in a ora c' J7 // commento all'istru(ione precedente7 )n EH l'opera(ione di s i$t viene // e$$ettuata $ra numeri int% per cui entrambi &li operandi ven&ono // "promossi" da b*te a int% prima di $are la s i$t7 0er ?uesto il // risultato della s i$t deve essere riconvertito in b*te% con // l'operatore di castin& +b*te,% per poter essere asse&nato ad a // l'uso della se&uente sintassi permette di evitare problemi di castin&1 a KK= J; // s i$t a sinistra di due posti // in numeri sen(a se&no +b*te sen(a se&no, la s i$t a sinistra di due bit // e?uivale ad una moltiplica(ione per 47 )n a ora c' 1L7

1.2.5

Rotazioni

In C $tandard non $ono !re$enti i$tru"ioni +-e e..ettuino rota"ione dei bit. 5er e..ettuare (ual+o$a di e(uivalente & ne+e$$ario $+rivere !i++oli !rogrammi. *$em!io9 da .are vedi a!!unti !re$i in +la$$e

1.2.6
4n $erbatoio *$em!io9

sempi comp!eti di I"# in $%

// loop di pollin& sen(a timeout // attendiamo c e il secondo bit pi6 si&ni$icativo diventi 1 5 ile ++)n+!"#E, / 0x40, == 0, 3 /* codice del loop di pollin&7 )l ciclo ese&ue $ino a c e il bit c e ci interessa non diventa 1 #e non c' altro da $are mentre si aspettare% il corpo del ciclo pu8 anc e essere vuoto */ 4

+arrello avanti e indietro in !olling

21a IC0 in C e C2.odt

Der. 0.E.0 2012-10-2F

!. E di @

Ing. Gabriele MONTI

www.ingmonti.it

,u!!oniamo di voler +ontrollare $e un +arrello in movimento & giunto al .ondo della $ua +or$a. 5er +ono$+ere la !o$i"ione del +arrello +i $erve un bit di in!ut digitale9 $u!!oniamo +-e il bit di !e$o @ del !ort di indiri""o 12GI% ma!!ato in I/O i$olato% $ia +ollegato ad un mi+ro$wit+-. /uando il mi+ro$wit+- d3 il valore 1% indi+a +-e il +arrello & giunto a .ine+or$a% mentre $e e$$o vale 0 il +arrello & an+ora lontano dal mi+ro$wit+-. 5er il +ontrollo del motore del +arrello +i $erve un bit di out!ut digitale9 $u!!oniamo +-e il bit di !e$o 1 del !ort 12H% ma!!ato in I/O i$olato% $ia +ollegato al motore% $+rivendo un 1 in (uel bit il motore $i a++ende% $e inve+e $i $+rive 0 il motore $i $!egne. Il !rogramma +-e reali""a l'a!!ro++io del +arrello al $uo .ine+or$a & il $eguente9 *$em!io9 da .are vedi a!!unti !re$i in +la$$e Il !rogramma tiene $otto +ontrollo il bit di ingre$$o% #interrogando# +ontinuamente il !ort relativo% non a!!ena rileva +-e il +arrello & giunto a de$tina"ione e$+e dal loo! di !olling e $!egne il motore. 8a (ue$to e$em!io !o$$iamo trarre delle +on+lu$ioni generali. 8urante il !rogramma & $tato ne+e$$ario tenere $otto +ontrollo lo $tato del $i$tema !er de+idere in (uale momento intervenire $u di e$$o. 5er $a!ere lo $tato del $i$tema abbiamo +ontinuamente letto il $uo valore in un #loo! di !olling#% !oi $iamo intervenuti +on un out!ut (uando l'evento $i & veri.i+ato. /uando $i e$egue l'I/O $otto il +ontrollo del !rogramma 6!olling7 $i .a $em!re +o$K9 +'& un loo! nel (uale $i attende +-e a++ada un evento% (uando l'evento a++ade il !rogramma interviene. ?a gran !arte dei +ir+uiti di I/O !o$$iede un regi$tro !arti+olare 6bBte di $tato7 +-e $egnala lo $tato del di$!o$itivo +ollegato. ?eggendo +ontinuamente (ue$to bBte di $tato il $o.tware identi.i+a gli i$tanti in +ui il di$!o$itivo -a bi$ogno di intervento% !er e$em!io (uando e$$o -a un bBte !ronto% o!!ure (uando & !ronto !er a++ettare un dato. 8eterminato in (ue$to modo l'i$tante dell'intervento% il !rogramma e..ettua l'o!era"ione di I/O ri+-ie$ta dal di$!o$itivo.

!. @ di @

2012-10-2F

21a IC0 in C e C2.odt

Potrebbero piacerti anche