Wrong again, UIO attempts to handle interrupts as events, but the concept is slow (typically ms, not us)
Regards, John > On Mar 2, 2016, at 11:22 PM, William Hermans <yyrk...@gmail.com> wrote: > > mmap isn't faster than a kernel driver (kernel code has priority over user > space code) and you still cannot handle interrupts from user space. Anyway, > you won’t find any drivers in the kernel implemented your way (/dev/mem, > mmap). However, mmap is used in drivers to eliminate mem to mem copy when > transferring data between user space and kernel space. > Regards, > John > Now. not only are you wrong, but you're making stuff up. You can handle > interrupts from userspace, as much as iio can. But it's not my job to tell > you how. I will mention that perhaps you should look into "userspace > drivers". As far as whats faster ? who f***ing cares. mmap() is a lot faster > than the ADCs . . . and still not the point. > > The point is, if you need fast ADC you should be using the PRU, and then you > may want to seriously consider using an external module. That is, for > anything serious. It does not matter how much CPU mmap() or iio uses. As any > % can preempt other code that needs to run *now* thus creating potential non > determinism. > > > On Thu, Mar 3, 2016 at 12:12 AM, John Syne <john3...@gmail.com > <mailto:john3...@gmail.com>> wrote: > mmap isn't faster than a kernel driver (kernel code has priority over user > space code) and you still cannot handle interrupts from user space. Anyway, > you won’t find any drivers in the kernel implemented your way (/dev/mem, > mmap). However, mmap is used in drivers to eliminate mem to mem copy when > transferring data between user space and kernel space. > > Regards, > John > > > > >> On Mar 2, 2016, at 11:04 PM, William Hermans <yyrk...@gmail.com >> <mailto:yyrk...@gmail.com>> wrote: >> >> From what I remember, the solution you proposed was using 90% of the CPU. >> >> 93% CPU load when using one shot mode, and continuously opening / closing a >> file descriptor to the ADC module. There is no such load when using mmap(), >> as mmap() is light years faster. >> >> >> On Wed, Mar 2, 2016 at 11:52 PM, John Syne <john3...@gmail.com >> <mailto:john3...@gmail.com>> wrote: >> When the ADC is in continuous mode, you shouldn't read the data until it has >> been updated. Simply reading the data over and over again to get the same >> value that hasn’t been updated is just dumb. The interrupt tells you when >> the conversion has been updated and then you read it. The point I was making >> originally was that there was no need to use PRU to sample the ADC at full >> speed. You can do the same from the IIO driver. Running at full speed >> consumes less than 10% of the CPU. If the IIO driver was updated to use DMA, >> then there would be no CPU utilization. From what I remember, the solution >> you proposed was using 90% of the CPU. >> >> Regards, >> John >> >> >> >> >>> On Mar 2, 2016, at 10:12 PM, William Hermans <yyrk...@gmail.com >>> <mailto:yyrk...@gmail.com>> wrote: >>> >>> First, that isn’t going to work because the ADC uses a scan loop and unless >>> you can respond to interrupts, you cannot determine when the ADC conversion >>> has completed. There is a much simpler way to do this. Simply use the IIO >>> driver and then >>> >>> FIrst of all, it *will* work. I've done it, and it works. Second of all, in >>> continuous mode, values are put out as 32bit values. Only the first 12bits >>> is the actual ADC value. The next 4 bits is the channel ID( 0 - 7 ), and >>> the last 16bits reserved / unused. Thirdly, using interrupts in fast moving >>> code is about as bad of an idea as using try / catch blocks in fast moving >>> code. It adds code latency, and also introduces non deterministic behavior. >>> This is why iio does not work fast for short data sets. >>> >>> >>> dd if=/dev/iio:device0 of=~/test >>> >>> Maybe, but it's a terrible idea if the target is flash media. The ADC's >>> can, and will use up a lot of storage space, very quickly. Just using 7 >>> channel in one shot mode, one channel after the next. In a loop of 300k >>> iterations. I was using up ~3MB/s disk space. Maxed out, and all channel >>> used. The ADC's should use up ~9MB/s or more. >>> >>> >>> On Wed, Mar 2, 2016 at 4:06 PM, John Syne <john3...@gmail.com >>> <mailto:john3...@gmail.com>> wrote: >>> First, that isn’t going to work because the ADC uses a scan loop and unless >>> you can respond to interrupts, you cannot determine when the ADC conversion >>> has completed. There is a much simpler way to do this. Simply use the IIO >>> driver and then read /dev/iio:device0 >>> >>> For example, do: >>> >>> dd if=/dev/iio:device0 of=~/test >>> >>> Enable the iio buffer and your file will receive samples at the configured >>> speed. >>> >>> Regards, >>> John >>> >>> >>> >>> >>>> On Mar 2, 2016, at 2:27 PM, William Hermans <yyrk...@gmail.com >>>> <mailto:yyrk...@gmail.com>> wrote: >>>> >>>> errr oops, I sent too soon. mmap() is fast, and can actually read from the >>>> ADC faster than the ADC can update values. But, it's using the main >>>> processor to do so, and if you need to do more than just read the ADC. >>>> Additional processes would have to compete for processor time. So, if one >>>> does want / need to read at maximum speed, it might be wise to offload the >>>> main processor, by using a PRU. >>>> >>>> It would not matter if this were done in userspace, or kernel space. It'll >>>> definitely put a load strain on the ARM processor. >>>> >>>> On Wed, Mar 2, 2016 at 3:19 PM, William Hermans <yyrk...@gmail.com >>>> <mailto:yyrk...@gmail.com>> wrote: >>>> You realize that you can read the ADC from Linux at full speed also? No >>>> need to use the PRU. >>>> Regards, >>>> John >>>> I do, because I've proven just that :) mmap() is dahmed fast . . . >>>> >>>> >>>> On Wed, Mar 2, 2016 at 2:32 PM, John Syne <john3...@gmail.com >>>> <mailto:john3...@gmail.com>> wrote: >>>> You realize that you can read the ADC from Linux at full speed also? No >>>> need to use the PRU. >>>> >>>> Regards, >>>> John >>>> >>>> >>>> >>>> >>>>> On Mar 2, 2016, at 12:43 PM, TJF <jeli.freih...@gmail.com >>>>> <mailto:jeli.freih...@gmail.com>> wrote: >>>>> >>>>> Hello PatM001! >>>>> >>>>> There's libpruio <http://beagleboard.org/project/libpruio/>, which >>>>> provides ADC sampling at full speed (200 kHz). You'll get rid of the >>>>> exeptions (and the miss readings of the sysfs driver in case of sampling >>>>> multiple channels). >>>>> >>>>> The downside: no C# binding yet. It's written in FreeBASIC/PASM and gets >>>>> shipped with a C header. You may try SWIG <http://www.swig.org/> on the C >>>>> header in order to generate a binding for your prefered language. >>>>> >>>>> If you try, please share your results, or at least report. >>>>> >>>>> BR >>>>> >>>>> -- >>>>> For more options, visit http://beagleboard.org/discuss >>>>> <http://beagleboard.org/discuss> >>>>> --- >>>>> You received this message because you are subscribed to the Google Groups >>>>> "BeagleBoard" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send an >>>>> email to beagleboard+unsubscr...@googlegroups.com >>>>> <mailto:beagleboard+unsubscr...@googlegroups.com>. >>>>> For more options, visit https://groups.google.com/d/optout >>>>> <https://groups.google.com/d/optout>. >>>> >>>> >>>> -- >>>> For more options, visit http://beagleboard.org/discuss >>>> <http://beagleboard.org/discuss> >>>> --- >>>> You received this message because you are subscribed to the Google Groups >>>> "BeagleBoard" group. >>>> To unsubscribe from this group and stop receiving emails from it, send an >>>> email to beagleboard+unsubscr...@googlegroups.com >>>> <mailto:beagleboard+unsubscr...@googlegroups.com>. >>>> For more options, visit https://groups.google.com/d/optout >>>> <https://groups.google.com/d/optout>. >>>> >>>> >>>> >>>> -- >>>> For more options, visit http://beagleboard.org/discuss >>>> <http://beagleboard.org/discuss> >>>> --- >>>> You received this message because you are subscribed to the Google Groups >>>> "BeagleBoard" group. >>>> To unsubscribe from this group and stop receiving emails from it, send an >>>> email to beagleboard+unsubscr...@googlegroups.com >>>> <mailto:beagleboard+unsubscr...@googlegroups.com>. >>>> For more options, visit https://groups.google.com/d/optout >>>> <https://groups.google.com/d/optout>. >>> >>> >>> -- >>> For more options, visit http://beagleboard.org/discuss >>> <http://beagleboard.org/discuss> >>> --- >>> You received this message because you are subscribed to the Google Groups >>> "BeagleBoard" group. >>> To unsubscribe from this group and stop receiving emails from it, send an >>> email to beagleboard+unsubscr...@googlegroups.com >>> <mailto:beagleboard+unsubscr...@googlegroups.com>. >>> For more options, visit https://groups.google.com/d/optout >>> <https://groups.google.com/d/optout>. >>> >>> >>> -- >>> For more options, visit http://beagleboard.org/discuss >>> <http://beagleboard.org/discuss> >>> --- >>> You received this message because you are subscribed to the Google Groups >>> "BeagleBoard" group. >>> To unsubscribe from this group and stop receiving emails from it, send an >>> email to beagleboard+unsubscr...@googlegroups.com >>> <mailto:beagleboard+unsubscr...@googlegroups.com>. >>> For more options, visit https://groups.google.com/d/optout >>> <https://groups.google.com/d/optout>. >> >> >> -- >> For more options, visit http://beagleboard.org/discuss >> <http://beagleboard.org/discuss> >> --- >> You received this message because you are subscribed to the Google Groups >> "BeagleBoard" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to beagleboard+unsubscr...@googlegroups.com >> <mailto:beagleboard+unsubscr...@googlegroups.com>. >> For more options, visit https://groups.google.com/d/optout >> <https://groups.google.com/d/optout>. >> >> >> -- >> For more options, visit http://beagleboard.org/discuss >> <http://beagleboard.org/discuss> >> --- >> You received this message because you are subscribed to the Google Groups >> "BeagleBoard" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to beagleboard+unsubscr...@googlegroups.com >> <mailto:beagleboard+unsubscr...@googlegroups.com>. >> For more options, visit https://groups.google.com/d/optout >> <https://groups.google.com/d/optout>. > > > -- > For more options, visit http://beagleboard.org/discuss > <http://beagleboard.org/discuss> > --- > You received this message because you are subscribed to the Google Groups > "BeagleBoard" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to beagleboard+unsubscr...@googlegroups.com > <mailto:beagleboard+unsubscr...@googlegroups.com>. > For more options, visit https://groups.google.com/d/optout > <https://groups.google.com/d/optout>. > > > -- > For more options, visit http://beagleboard.org/discuss > <http://beagleboard.org/discuss> > --- > You received this message because you are subscribed to the Google Groups > "BeagleBoard" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to beagleboard+unsubscr...@googlegroups.com > <mailto:beagleboard+unsubscr...@googlegroups.com>. > For more options, visit https://groups.google.com/d/optout > <https://groups.google.com/d/optout>. -- For more options, visit http://beagleboard.org/discuss --- You received this message because you are subscribed to the Google Groups "BeagleBoard" group. To unsubscribe from this group and stop receiving emails from it, send an email to beagleboard+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.