Gilles Chanteperdrix wrote:
> Alexis Berlemont wrote:
> > Hi,
> > 
> > Daniele Nicolodi wrote:
> >> Hello. In my application I need to read data from an ADC card in blocks
> >> of a given number of samples. For efficiency I'm using an mmapped buffer
> >> to exchange data with the ADC driver. I'm setting up the acquisition,
> >> and then calling a loop like this:
> >>
> >> unsigned int required = <compute required number of bytes>;
> >> unsigned int read = 0;
> >> while (1) {
> >>   while (read < required) {
> >>     read = a4l_pool(...);
> >>   }
> >>   process(buffer, ...);
> >> }
> >>
> >> However if I run this loop in a real time thread the tight while loop is
> >> an obvious cpu hog: the watchdog kicks in and kills the thread.
> >>
> >> There is not an analogy API that can be used to require a certain amount
> >> of data to the ADC driver. How can I code this loop to let other
> >> processes to run?
> > 
> > As a matter of fact, there is something in the API which could have
> > helped you in an unmapped configuration. If you set the flag
> > A4L_CMD_BULK in the field "flags" of the command structure, a call to
> > a4l_async_read() only returns when the data size specified as argument
> > is available. 
> > 
> > Unfortunately, I have not done the same thing with a4l_poll, I might
> > have added the requested size as an additional argument to a4l_poll. 
> > 
> > Any idea on how to extend the API without breaking it ?
> 
> Maybe it would be possible to use the standard "select" call, with a
> threshold configurable with an ioctl ?

Thanks. I added your idea in my TODO list.

> 
> 
> -- 
>                                           Gilles.

-- 
Alexis.

_______________________________________________
Xenomai-help mailing list
Xenomai-help@gna.org
https://mail.gna.org/listinfo/xenomai-help

Reply via email to