[pso] Tema 2 Linux - probleme handler intrupere

Alexandru Bleotu alexbleotu at gmail.com
Sat Apr 4 09:47:51 EEST 2009


Sa inteleg ca in functia write mai intai se scrie in FIFO pe seriala pana se
umple si daca mai sunt date se vor stoca intr-un buffer, urmand a fi
transmise in tratarea unei intreruperi? Pentru ca in tema se specifica clar
ca se vor folosi intreruperi pentru transmisie si ca sunt necesare doua
bufferuri.

2009/4/4 Octavian Voicu <octavian.voicu at gmail.com>

> Functia write din file ops e apelata de kernel cand vrea sa scrie date in
> device (daca faci echo "x" > /dev/mydev, unde mydev este asociat driverului
> tau prin type/major/minor, kernelul apeleaza functia write din file ops). In
> functia write, scrii datele cu outb() catre device.
> IRQ-ul este pentru cand device-ul are date noi si semnaleaza ca trebuie
> citite. Folosind inb(base) citesti datele de la device si apoi faci inca un
> inb(base+2) ca sa citesti din registrul IIR si sa resetezi intreruperile.
>
> Read-ul din file ops ar trebui sa returneze datele citite in handlerul de
> intrerupere (sau sa se blocheze daca nu sunt date disponibile).
>
>
> 2009/4/4 ovidiu popa <ov.popa at gmail.com>
>
>> Salut,
>>
>> Am urmatoarea nelamurire legata de comportarea temei. Mai precis
>> intrebarea e legata de urmatoarele linii din teste
>>
>> test(do_write(com1, wb, BUFFER_SIZE) == 0, "write %s", com1_path);
>> test(do_read(com2, rb, BUFFER_SIZE) == 0, "read %s", com2_path);
>>
>> Din cate am inteles cautand pe lista de disctutii, in write copiez din
>> user space intr-un write buffer local. Write Bufferul este scris pe serial
>> cu outb in handlerul de intrerupere.
>> In read copiez in user space dintr-un read buffer local. Read bufferul
>> este umplut cu date primite pe seriala(inb) in handlerul de intrerupere .
>>
>> Nelamurirea mea este cum se leaga exact functiile de read write de
>> intrerupere? Mie imi intra o singura data in intrerupere la initializarea
>> modului.
>> Imi ramane blocat in read.
>>
>> Cum ar trebui sa intre in intrerupere pentru ca in write doar se scrie in
>> bufferu intern. Mie imi scapa.
>>
>> _______________________________________________
>> pso mailing list
>> pso at cursuri.cs.pub.ro
>> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
>>
>>
>
>
> --
> Octavian Voicu
>
> _______________________________________________
> pso mailing list
> pso at cursuri.cs.pub.ro
> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/pso/attachments/20090404/b8dd69c8/attachment.htm>


More information about the pso mailing list