From: Jan Kiszka <jan.kiszka@domain.hid>
To: Eric Noulard <eric.noulard@domain.hid>
Cc: xenomai@xenomai.org
Subject: Re: [Xenomai-help] too fast write to serialport?
Date: Fri, 14 Sep 2007 19:32:01 +0200 [thread overview]
Message-ID: <46EAC591.4050602@domain.hid> (raw)
In-Reply-To: <cbe23c50709140112q160c809alc398ed1b9a502c40@domain.hid>
[-- Attachment #1: Type: text/plain, Size: 3484 bytes --]
Eric Noulard wrote:
> 2007/9/14, Jan Kiszka <jan.kiszka@domain.hid>:
>> Eric Noulard wrote:
>>> 2007/9/13, Bachman Kharazmi <bahkha@domain.hid>:
>>>> 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.
>
> I am not sure to fully understand that.
> Do you mean that the serial driver (you wrote) has currently no
> way to know if written bytes have been sent on the wire by the UART ?
That is true. The asynchronous transmitting of data was intentionally
installed, but I didn't consider to establish some interface to request
and/or synchronise on the output completion. Will think about this when
time permits.
>
>> That's a shortcoming of the current
>> driver (+ the serial profile spec) I trapped in myself - as the
>> developer of this code. :(
>
> Meaning it _could_ be done but it is not in current implementation?
Yeah, likely. One option I currently have in mind is to establish
something like RTSER_EVENT_TXDONE that is raised when he TX interrupt
fired and the software buffer is empty.
>
>>> 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.
>
> Ok I see blocking / timeout feature is a "software" feature of the driver.
>
> For some kind of "realtime" serial communication ones
> may need something like "synchronous" write, meaning
> driver write call should block or timeout if underlying HW is not
> able to send the provided data.
Yes, I agree, I just don't want to change the semantic of rtserial's
write service. Besides likely breaking existing apps, I don't see the
need for the change in the _common_ case. Most scenarios I saw so far
either used the real-time UART port just for reading (+ some
initialisation maybe) or they synchronised on the transmission by
waiting on a reply from the devices. The case that you just write was
yet not required, but it is a valid one. For that case, a patter of
"write to port" + "wait on TXDONE event" would be appropriate IMO.
>
> I hope you'll excuse me to give such approximate [wrong] answers.
> I was trying to help, may be I should check the source code
> before trying to answer.
>
> Sorry about that.
>
No need to excuse. This misunderstanding is surely not your fault, and
this whole thread nicely uncovered some weaknesses that need to be fixed.
Jan
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 250 bytes --]
next prev parent reply other threads:[~2007-09-14 17:32 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-13 9:45 [Xenomai-help] too fast write to serialport? Bachman Kharazmi
2007-09-13 11:34 ` Eric Noulard
2007-09-13 14:06 ` Bachman Kharazmi
2007-09-13 14:16 ` Eric Noulard
2007-09-14 7:03 ` Jan Kiszka
2007-09-14 8:12 ` Eric Noulard
2007-09-14 17:32 ` Jan Kiszka [this message]
2007-09-15 11:46 ` Anders Blomdell
2007-09-15 14:00 ` Eric Noulard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=46EAC591.4050602@domain.hid \
--to=jan.kiszka@domain.hid \
--cc=eric.noulard@domain.hid \
--cc=xenomai@xenomai.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.