Hi John Thanks for the link.
On Sun, Sep 14, 2014 at 3:44 AM, John Syn <john3...@gmail.com> wrote: > > From: neo <prag.in...@gmail.com> > Reply-To: "beagleboard@googlegroups.com" <beagleboard@googlegroups.com> > Date: Saturday, September 13, 2014 at 6:17 AM > To: "beagleboard@googlegroups.com" <beagleboard@googlegroups.com> > Subject: Re: [beagleboard] Re: registering asynchronous events on kernel > thread in user space > > Hi Brandon > > I am learning to use the BBB to interface a 802.15.4 radio to BBB without a > MCU between BBB and CC2500. I want to remove the MCU and interface directly > to the Kernel. > > Are you referring to the CC2520? If so, there is a driver in the linux-wpan > repo: > > https://github.com/linux-wpan > > If you want support, send “subscribe linux-wpan” e-mail to: > > majord...@vger.kernel.org > > Regards, > John > > > So for this i have to service interrupts which will be a gpio interrupt to > BBB if a new packet arrives. So that the reason for the Doubts n questions. > And also the reason why i want to know which method is faster or better. > But I think that i have to do some profiling as u pointed out. > Will post the results ASAP here. > > Thanks for the reply > > On Friday, September 12, 2014 1:19:26 AM UTC+5:30, Brandon I wrote: >> >> OK, one more time. All userspace interrupts work the same, pru, network >> driver, *anything*. The process blocks until the interrupt handler unblocks >> the process with a semaphore or completion in the kernel. For example, when >> you read data for a socket connection, it blocks. When data comes in, the >> data is copied to userspace, the read function unblocks. Again, this is all >> explained in that LDD3 chapter I linked. There's no other way to do it, >> except going around the kernel and polling memory. >> >> 1. This isn't a realtime kernel. You will always have jitter. Does it >> matter? I don't know what you're doing. You don't need to use polling. UIO >> and select doesn't use polling. >> >> 2. Using select (and even poll() since it's just a wrapper for select()) >> on the gpio doesn't poll. It's interrupt driven. Same method as described. >> >> 3. Same method as described. >> >> If you use the PRU, it will be the same method to notify your userspace >> application with the same shortcomings, unless you put all of your code into >> the pru. If you want deterministic timing, you either need a realtime >> kernel, or put all your code on the pru. But, I can guarantee you don't need >> deterministic timing, and I can guess that you're worrying about nothing >> Seriously, do some benchmarks with sysfs. It's only a few lines of code. >> And, there are all sorts of userspace hardware drivers that use userspace >> interrupts out there including graphics and network. >> >> If you only need to know when a gpio event happened, and process it later >> (it will always be later since this isn't a realtime kernel or in the pru), >> you can timestamp the event. I believe you can do this with the enhanced >> timers, and I know you can do this in the pru. So it would go, event >> happens, pru/etimer hardware timestamps the event, sends interrupt, >> userspace gets interupt using "the only way possible", userspace reads >> timestamp from hardware, pretends that the event happened at the timestamp >> for any calculations. >> >> If you explained what you were doing, we could advise you better. >> >> Good luck! >> >> On Thursday, September 11, 2014, neo <prag....@gmail.com> wrote: >>> >>> Hi Brandon >>> >>> I agree with jitter involved with processing interrupts and 100% cpu >>> usage during polling for the same, so is there no way to let the user-space >>> know that interrupt has occurred apart from polling ? >>> The reason why i said pseudo-interrupt is because we are polling and >>> waiting there which is same as watching a flag in a UART register for RX >>> flag to set. >>> I am curious as to how interrupts for Ethernet and usb are written. I am >>> guessing that the ISR will use the DMA to transfer bytes to user-space. But >>> even in that case the userspace should know that a new data has arrived. >>> Then hoe to synchronize the kernel space and user-space if there are to >>> share a data ? >>> >>> Thanks... >>> >>> >>> On Thursday, September 11, 2014 2:26:15 AM UTC+5:30, Brandon I wrote: >>>> >>>> > pseudo-interrupt from user space >>>> >>>> There's nothing pseudo about it. Again, any usual way to have a >>>> userspace application respond to an interrupt will be the exact same. The >>>> kernel will block the userspace process until the interrupt is seen. The >>>> only real alternative is burning up the cpu with memory polling, which >>>> appears to be what the BBIOlib method uses. So, your latency is limited to >>>> your poll speed (which can be faster than interrupts). But, if you have a >>>> constant poll for minimum latency, lets hope you're not trying to do >>>> something important elsewhere since your cpu usage will be at 100%, and >>>> you'll be maximizing process to process context switching! >>>> >>>> For 4, The only difference between a userspace and kernel space >>>> interrupt handler is where the code is that responds to the interrupt. You >>>> will only benefit from writing your own interrupt handler if you put all of >>>> your code that does something with that interrupt in the kernel. Otherwise, >>>> you're back to process blocked by kernel, interrupt occurs, kernel unblocks >>>> process, process does something after seeing the interrupt....back to the >>>> sysfs/UIO method. >>>> >>>> I would try some benchmarks. See if the regular UIO/sysfs interrupt >>>> method gives you sufficient performance. And definitely keep in mind John's >>>> statement. You're going to see a massive amount of jitter for anything in >>>> userspace or kernel space (better jitter since you can disable interrupts >>>> and whatnot, but if you don't finish quickly in kernel space, you'll crash >>>> the kernel). >>>> >>>> If something like a precise timestamp is needed for an async event, then >>>> there are other ways to approach this. If you're looking for fixed low >>>> latency, you're doomed. >>>> >>>> On Wed, Sep 10, 2014 at 5:13 AM, neo <prag....@gmail.com> wrote: >>>>> >>>>> pseudo-interrupt from user space >>>> >>>> >>>> >>> -- >>> For more options, visit http://beagleboard.org/discuss >>> --- >>> You received this message because you are subscribed to a topic in the >>> Google Groups "BeagleBoard" group. >>> To unsubscribe from this topic, visit >>> https://groups.google.com/d/topic/beagleboard/eNX0CU7-noE/unsubscribe. >>> To unsubscribe from this group and all its topics, send an email to >>> beagleboard+unsubscr...@googlegroups.com. >>> For more options, visit 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. > > -- > For more options, visit http://beagleboard.org/discuss > --- > You received this message because you are subscribed to a topic in the > Google Groups "BeagleBoard" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/beagleboard/eNX0CU7-noE/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > beagleboard+unsubscr...@googlegroups.com. > For more options, visit 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.