OK, so while the executable is running. How much CPU is being used ? The reason I ask may be less than obvious, but I'm asking because I do not know what type pruIo *is*. But the assignment of this type looks remarkably similar to mmap(). e.g. a file mapped to a region in memory.
So a few things to take notice of. First, you're making a call to select() every while loop iteration. That is to say: every 1ms, assuming the OS lets you. select() I believe is a system call, and can slow things down. If the call to the file descriptor object is blocking. It can slow things down quite considerably. Here, again, I'm not familiar with TJF's library to know. One potential "fix" might be to change the file descriptor object to O_NONBLOCK using fcntl(). Then perhaps look into using epoll() which has none of the performance issues that select(), or poll() have. Which is something I do not experience with personally, but have been reading a lot about lately for my own purposes. Second, you making a call to every while loop cycle to fprintf() which has to format 8 variables down to every 1ms. fprintf(), I'm not very familiar with, but if it is similar to printf() this can be another performance hit. With that said, I'm not sure how you could avoid this. That is to say, I know what the function does, I just have never read the actual implementation code . . . so could not tell you how it does, what it does. I'm assuming, it behaves exactly like printf(), but allows one to send this formatted output to an alternate "file stream". Without . . .heh . . . "magic hand waving". Thirdly, and I'm still not quite sure how often this happens. Because I have not even a clue what the TEMP_FAILURE_RETRY macro does. Here, Im assuming it returns some condition based on the state of the file descriptor( ready read, etc ). But once you break out of the while loop, into the outside do loop, you have *cough* 3 what I think are also system calls to tcgetattr(). But once again, I'm not all that familiar with termios either . . . Anyway, are you seeing a pattern here ? For very performant code, system calls are *baaaaaaaaad*. Did I emphasize that enough ? This is why many people when working with file descriptors often use mmap() Or rather is one very good reason why. Unfortunately I'm also not all that familiar with the ADC on this platform either . . . However, assuming there is a sysfs pseudo file available for the ADC, using mmap() to map to it should not be all that difficult. After that, I think the majority of the difficulty would be working out timing. Or in other words it is very possible using mmap() on the file descriptor to the ADC and just pumping that data straight into the termios buffer may be too fast. Anyway, sorry I could not answer your question better . . . but hopefully I did give you a few things to consider. Perhaps TJF can elaborate on some of the points I made, and prove / disprove what I'm assuming in many cases. On Tue, Sep 29, 2015 at 1:38 PM, Rathin Dholakia <[email protected]> wrote: > Hi, > Thank u very much for prompt response. I am using the default C wrapper > example from libpruio and modified it. HEre are the changes and the paste > bin > > Modifications: > 1. changed steps - 8 > 2. Made delay = 0, > 3. Start sample delay = 0 > Paste bin: http://pastebin.com/yBHdN548 > <iframe src="http://pastebin.com/embed_iframe.php?i=yBHdN548" > style="border:none;width:100%"></iframe> > > On Wednesday, September 30, 2015 at 1:59:05 AM UTC+5:30, William Hermans > wrote: >> >> Well essentially, you probably need a review of your code. If it's large, >> past it on a pastebin site, and give us a link here. Also ALL code would be >> best. bit's and pieces won't be enough. >> >> On Tue, Sep 29, 2015 at 1:16 PM, Rathin Dholakia <[email protected]> >> wrote: >> >>> Dear Community Members, >>> >>> I am trying to implement a fast 8 channel Analog capture using on board >>> ADC on BBB. I know there are only 7 available on pin header, but as I am >>> starting off & learning I am ok with count of 7. :) >>> >>> I just wanted to have an opinion about the approach to opt for, What >>> would be the most optimum (& preferably faster to implement) option to >>> achieve it? >>> >>> I have read quite a few articles and thread (& more confused ) and >>> currently I am using libpruio <http://beagleboard.org/project/libpruio/> >>> for implementing it but as of now even after configuring libpruio I am only >>> getting 900 - 1000 samples per seconds. >>> >>> So, is it my configuration wrong or for such high speed I should opt for >>> external ADC? or something else? >>> >>> I am completely NEW to EMBEDDED domain. So please pardon me. >>> >>> It would be great if someone could guide me, precisely towards some >>> direction. >>> >>> Sincerely, >>> Rathin >>> >>> -- >>> 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 [email protected]. >>> 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 [email protected]. > 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 [email protected]. For more options, visit https://groups.google.com/d/optout.
