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 ? > > Thanks. Cheers, > -- > Daniele > > _______________________________________________ > Xenomai-help mailing list > Xenomai-help@gna.org > https://mail.gna.org/listinfo/xenomai-help -- Alexis. _______________________________________________ Xenomai-help mailing list Xenomai-help@gna.org https://mail.gna.org/listinfo/xenomai-help