[pso] [Tema2][Windows] Disable RDAI Interrupt

Macicas Teodor teodor.macicas at cti.pub.ro
Fri Apr 23 21:15:06 EEST 2010


Andrei Voinescu wrote:
> 2010/4/23 Macicas Teodor <teodor.macicas at cti.pub.ro>:
>   
>> Andrei Voinescu wrote:
>>     
>>> 2010/4/23 Macicas Teodor <teodor.macicas at cti.pub.ro>:
>>>
>>>       
>>>> Salut,
>>>>
>>>> Am o problema cu dezactivarea intreruperii RDAI atunci cand buffer-ul
>>>> read
>>>> este plin.
>>>> Apelez WRITE_PORT_UCHAR((PUCHAR) IER(data->base),
>>>> READ_PORT_UCHAR((PUCHAR)
>>>> IER(data->base)) & ~IER_RDAI ); in ISR. Tester-ul se blocheaza imediat
>>>> dupa
>>>> ce bufferul read este plin si se face aceasta dezactivare.
>>>>
>>>> Aveti vreo idee de ce se intampla asta ?
>>>>
>>>>         
>>> Și dacă nu dezactivezi întreruperea dar dai discard la caracterele
>>> care mai vin ce se întâmplă?
>>>
>>>       
>> Dupa ce am comentat dezactivarea intreruperii si am incercat sa fac un
>> READ_PORT_ a inghetat tot sistemul - fara BSOD.
>> Ceea ce mi se pare amuzant, e ca daca pur si simplu fac doar un 'break' din
>> while-ul din ISR cand buffer-ul read este plin, toate testele, inclusi imi
>> trec. Fara sa ma chinui in vreun fel cu dezactivarea intreruperii RDAI.
>> Exista vreo explicatie pentru asta ?
>>
>> Tin sa precizez ca buffer-ul meu este, intentionat, f mic - 20char pentru si
>> se ajunge de multe ori in situatia cand este plin. N-ar fi trebuit ca acele
>> intreruperi netratate sa ma conduca la pierderea unor caractere ?!
>>     
>
> Teoretic da. Practic însă, fiind și în mediu virtualizat, nu te
> aștepți să corespundă 100% așteptărilor, mai ales că nu sunt multe
> ordine de mărime diferență între buffer-ul cu care se face testul și
> buffer-ul tău din driver (+FIFO).  Va exista un delay între trasmisie
> și recepție practic care-ți acoperă diferențele între mărimea
> buffer-elor.
>
> Oricum în momentul în care e buffer-ul plin, tu vei pierde caractere
> și dacă vine întreruperea și dai break, și dacă o dezactivezi.
>   
>

Am, inteles. In concluzie, nu conteaza daca fac break sau dezactiv 
intreruperea ? Daca da, atunci de ce initial [i.e in threadurile 
anterioare] ni s-a spus s-o dezactivam atunci cand bufferul este plin ? 
Este ok daca inlocuiesc dezactivarea cu 'break' ?

-Teodor




More information about the pso mailing list