[PD-dev] while loop segfault

Martin Peach chakekatzil at gmail.com
Tue Oct 14 15:06:13 CEST 2014


Not sure why it segfaults, just want to say that that method is really bad.
Because of Pd's control rate as well as the serial interface latency, your
timing will be really sketchy. The way to do what you want is to implement
the ranging entirely on the arduino and send the values back to Pd via
[comport]. So a Pd [pulseIn] object shoud simply send a request to the
arduino to start a pulse and return the time. It could be implemented as an
abstraction containing [comport].

Martin

On Mon, Oct 13, 2014 at 9:29 PM, Colet Patrice <colet.patrice at free.fr>
wrote:

> Hello, I'm trying to implement the pulseIn() function we can find in
> arduino libraries into an external.
>
> I couldn't make it work because some part doesn't seem to behave like I
> expect so I'm wondering if it's caused by puredata process,
> so maybe someone in the list could enlight me about that.
>
> The purpose of the external is about using an ultrasound sensor connected
> on gpio that require a microsecond timer for getting distance like this:
>
>
> //here is a custom timer using a struct provided by pcduino headers:
> #include core.h
> unsigned long pat_micros() {
>     struct timeval tv;
>     gettimeofday(&tv,NULL);
>     return tv.tv_sec*(uint64_t)1000000+tv.tv_usec;
> }
>
> //here is the custom pulseIn() function:
> unsigned long pat_pulseIn(t_pdpcduino *x, int pin)
> {
>     unsigned long timeout = 100000;
>     unsigned long start = pat_micros();
>
>     while( pdpcduino_gpio_read2 (x, pin) == 1 )
>         if( pat_micros() - start > timeout )
>             return 0;
>
> // this is where I'm getting a segmentation fault:
>
>     while ( pdpcduino_gpio_read2 (x, pin) == 0 )
>         if( pat_micros() - start > timeout )
>         return 0;
>
> //...
>     unsigned long value = pat_micros();
>
>     while( pdpcduino_gpio_read2 (x, pin) == 1 )
>         if( pat_micros() - start > timeout )
>             return 0;
>
>     return pat_micros() - value;
>
> }
>
> //...
>
>
> If I reduce the timeout number, segfault comes randomly after this
> function has been triggered, so I'm wondering if this method is really
> appropriate,
> is there an exemple of external (containing such while loops) I could get
> inspired from to write this pulseIn() function?
>
>
>
>
>
>
> _______________________________________________
> Pd-dev mailing list
> Pd-dev at lists.iem.at
> http://lists.puredata.info/listinfo/pd-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puredata.info/pipermail/pd-dev/attachments/20141014/5a7a8814/attachment.html>


More information about the Pd-dev mailing list