[pso] [Tema2][Linux]Buffers

Andrei Voinescu voinescu.andrei at gmail.com
Tue Apr 20 23:09:08 EEST 2010


2010/4/20 Alexandru Juncu <alexandrujuncu at gmail.com>:
> Salut.
>
> Am niște neclarități legate de cum ar trebui să administrăm buffer-ele.
> De exemplu bufferul de citire care este de mărime BUFFER_SIZE. Din
> bufferul acela, sunt ocupați device.read_size, să zicem...
> 1) Dacă eu primesc un apel read (cat /dev/uart), trimit în user space
> cât am eu în buffer și după cer de la hardware să umblu iar bufferul
> și la urmatorul read (cat) să trimit datele din noul buffer?
Nu există "cerere la hardware să umpli iar buffer-ul". RTAI e activată
tot timpul, seriala are comportament de receiver fie că a fost făcut
un apel de read, fie că nu.
Ca să îți răspund complet la întrebare, la primul read scrii cât ai tu
în buffer (cul puțin un element). Dacă la următorul read nu s-a mai
strâns un caracter, atunci read-ul se blochează așteptând un
caracter.Deci conținutul la fiecare "cat" este diferit, cu datele noi.

Există totuși un marker pentru cât de plin e buffer-ul și să
presupunem că dacă se umple buffer-ul și ție îți mai vin date pe
serială poți să le pierzi.
>
> 2) Dacă primesc un apel read dar cu offset > device.read_size,
> presupun că mă blochez și să aștept până mai citesc ceva de la device?
> Sau trimit ce am în buffer și spun că am trimis doar read_size și după
> umplu iar bufferul din hardware?
Această situație este dincolo de cerințele și de testele temei. Tu vei
transfera date în read cât ai în buffer, deci va fi gol la sfârșitul
apelului  (sau măcar la sfârșitul while-ului). Un offset nu prea are
sens în contextul acesta.

>
> 3) Dacă primesc un apel cu read dar cu offset > BUFFER_SIZE, la fel,
> trimit ce am până atunci în buffer și spun că doar atât am putut
> trimite sau aștept mai multe umpleri de buffer de la hw până să fi
> trimis cât offset mi-a cerut?
>
> Cred că întrebările au mai mult un stil  if $? == yes goto next_question.
else fall-through >:)
> Mulțumesc.
> _______________________________________________
> pso mailing list
> pso at cursuri.cs.pub.ro
> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
>


More information about the pso mailing list