Eric Noulard wrote:
> 2007/9/13, Bachman Kharazmi <[EMAIL PROTECTED]>:
>> Hi!
>> I try to print to serialport using rtdm according to: 
>> http://pastebin.ca/695418
>>
>> But if I don't have sleep(1) only "hello   " or similar is written to
>> the serialport.
>> But if I've sleep(1) "helloworld" is written every second as expected.
> 
> I'm no xenomai expert but I think
> you shouldn't write to serial device in such a tight loop:
> 
> while(counter <100){
>         rt_dev_write(fd, myString, strlen(myString));
>        printf("%d\n",counter);
>       // sleep(1);  WITHOUT THIS SLEEP helloworld is sent on serial once.
>      counter++;
> }

The _will_ work, but the problem is that pending bytes are dropped on
rt_dev_close + the shortcoming that there is no way to synchronise on
the buffer being flushed reliably. That's a shortcoming of the current
driver (+ the serial profile spec) I trapped in myself - as the
developer of this code. :(

> 
> because you will certainly fills the send buffer without giving a chance
> to the drive to send more data than the one that fits in the buffer
> (this heavily depends wether if the device is opened in blocking
>  or non-blocking mode)

Nope, the problem here has nothing to do with the timeout or the
blocking mode. That write will block (given a timeout > 0 or infinite)
when the software buffer (4k) is full. That's not specific in the serial
profile, and that's bad.

> 
> FIRST of ALL you should check the return value of your function call
> 
> rt_dev_write should return either the number of written bytes
> http://www.xenomai.org/documentation/branches/v2.3.x/html/api/group__userapi.html#ge966625748b547779bb8c5385e7fb2aa
> 
> or a negative error code:
> http://www.xenomai.org/documentation/branches/v2.3.x/html/api/group__rtserial.html
> 
> 
>> Is this some kind of limit how quickly I can write stuff on the rtser0?
> 
> Yes there must be.
> Serial device are not as fast as any recent CPU.
> Beginning with the fact that you did configure the serial link at 115200 bauds
> it would'nt wise to try to feed at an "average" speed that exceed this number.
> 
> 
>> How do I handle this?
> 
> Check the return value of your rt_dev_write calls :)
> 

Won't help here as I explained above. Still, my beer-ware was lacking
return code checks, and that is never recommendable for real code.

Jan

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help

Reply via email to