Console problem update
Etienne Fortin
etienne.fortin at sensio.tv
Fri Nov 5 16:10:56 UTC 2004
Some more info.
My rawInBuf is now 1024 bytes. And it gives me the same problem: Head go
beyond Tail in rawInBuf and rawInBufDropped starts to go up.
$2 = {forw = 0x0, back = 0x0, refcount = 3, major = 1, minor = 0, isem =
436273159, osem = 436273160, cbuf = 0x80d53be4 "ò", ccount = 1, cindex =
1, column = 0, read_start_column = 0, termios = {c_iflag = 8450, c_oflag
= 4294967230, c_cflag = 2237, c_lflag = 32768, c_line = 0 '\0', c_cc =
"\003\034\177\025\004\n\001\000\021\023\032\000\022\017\027\026\000\000"
}, vtimeTicks = 100, rawInBuf = {theBuf = 0x80d5407c "", Head = 197,
Tail = 196, Size = 1024, Semaphore = 436273162},
rawInBufSemaphoreOptions = 0, rawInBufSemaphoreTimeout = 100,
rawInBufSemaphoreFirstTimeout = 0, rawInBufDropped = 3, rawOutBuf =
{theBuf = 0x80d53c70 "\r\n\r\nC3D 1.0.0 File Tranfer Test\r\nNeed a
valid FAT12 file system on /dev/nvram0 (run fs_create).\r\n\r\nMount
DOSFS file system on /dev/nvram0 (run fs_create before)\r\nfsmount:
mounting of \"/dev/nvram0\" to "..., Head = 413, Tail = 413, Size =
1024, Semaphore = 436273161}, t_dqlen = 0, rawOutBufState = rob_idle,
device = {firstOpen = 0x17a8 <console_first_open>, lastClose = 0x1804
<console_last_close>, pollRead = 0, write = 0x16de
<console_interrupt_write>, setAttributes = 0x172e
<console_set_attributes>, stopRemoteTx = 0x1750
<console_stop_remote_tx>, startRemoteTx = 0x177c
<console_start_remote_tx>, outputUsesInterrupts = 1}, flow_ctrl = 1,
lowwater = 512, highwater = 768, rxTaskId = 0, txTaskId = 0, t_line = 0,
t_sc = 0x0, tty_snd = {sw_pfn = 0, sw_arg = 0x0}, tty_rcv = {sw_pfn = 0,
sw_arg = 0x0}, tty_rcvwakeup = 0}
Something to do with the absence of hardware flow control?
And now no matter what file I send, the problem appears at 12k for a
1024 buffers (sooner for a 128 bytes buffer).
Etienne
-----Message d'origine-----
De : Thomas Doerfler [mailto:Thomas.Doerfler at imd-systems.de]
Envoyé : 5 novembre, 2004 09:56
À : Etienne Fortin; rtems-users at rtems.com
Objet : RE : RE : RE : Console problem update
Etienne,
a baud rate difference of 2% is still tolerable, as
fas as I know. And you would be well below.
I just had another look into the data structure
snapshot you sent this morning (last night...). To
my suprise, the "flow_ctrl" fiels is non-zero. The
value 512 means, that the "input is controlled with
XON/XOFF protocol". Maybe you should try to clear
the "IXON" and "IXOFF" flags in the c_iflag field of
termios settings?
wkr,
Thomas.
> Hi Thomas,
> Yes, the buffer is empty. But, it shows that at least 1161 characters
> were received. After that, termios thinks there's no more data
> received or it lost sync or something else.
>
> I said before that my baudrate is really 9630 and not 9600. The
> computer is 9600. Do you think that can be the problem?
>
> Etienne
>
>
>
> -----Message d'origine-----
> De : Thomas Doerfler [mailto:Thomas.Doerfler at imd-systems.de]
> Envoyé : 5 novembre, 2004 02:23
> À : Etienne Fortin
> Objet : RE : RE : Console problem update
>
>
> Etienne,
>
> from the data you sent, the input and output buffer really is
> "empty", (for rawInBuf and rawOutBuf, "Head" and "Tail" have the
> same values) but I guess you already saw this.
>
> Which BSP are you using? Is it possible your console driver
> interrupt gets stuck, when there is a receive and transmit
> interrupt pending at the same time?
>
> wkr,
> Thomas.
>
>
> > Hi Thomas,
> > Yes a VERY nasty problem... It must have something to do with my
> > comprehension and the way I implemented the console driver... But, I
> > was able to make a lot of other things work before (I mean, the
> > balance of
> > RTEMS) and I got nasty problem with RTEMS before. But that one is
> > special. Its so stupid! And I hate to work with transfer protocol.
You
> > know you'll be able to make it work, you just don't know when...
> >
> > Anyway, here's the snapshot of the rtems_termios_tty structure when
> > the semaphore get stuck.
> >
> > $2 = {forw = 0x0, back = 0x0, refcount = 3, major = 1, minor = 0,
> > isem
>
> > = 436273159, osem = 436273160, cbuf = 0x80d542a4 "}", ccount = 0,
> > cindex = 0, column = 0, read_start_column = 0, termios = {c_iflag =
> > 9474, c_oflag = 4294967230, c_cflag = 2237, c_lflag = 32768, c_line
=
> > 0 '\0', c_cc =
> >
> "\003\034\177\025\004\n\001\000\021\023\032\000\022\017\027\026\000\00
> 0"
> > }, vtimeTicks = 100, rawInBuf = {theBuf = 0x80d53a98 "", Head =
> > 1161, Tail = 1161, Size = 2048, Semaphore = 436273162},
> > rawInBufSemaphoreOptions = 0, rawInBufSemaphoreTimeout = 100,
> > rawInBufSemaphoreFirstTimeout = 0, rawInBufDropped = 0, rawOutBuf =
> > {theBuf = 0x80d543b0 "ransfer...\r\n\r\nC\006C.\r\nrawInBuf.Size =
> > 2048\r\nPress a key to begin t", Head = 17, Tail = 17, Size = 64,
> > Semaphore = 436273161}, t_dqlen = 0, rawOutBufState = rob_idle,
> > device
> =
> > {firstOpen = 0x17a2 <console_first_open>, lastClose = 0x17ea
> > <console_last_close>, pollRead = 0, write = 0x16dc
> > <console_interrupt_write>, setAttributes = 0x172c
> > <console_set_attributes>, stopRemoteTx = 0x174e
> > <console_stop_remote_tx>, startRemoteTx = 0x1778
> > <console_start_remote_tx>, outputUsesInterrupts = 1}, flow_ctrl =
> > 512, lowwater = 64, highwater = 96, rxTaskId = 0, txTaskId = 0,
> > t_line = 0, t_sc = 0x0, tty_snd = {sw_pfn = 0, sw_arg = 0x0},
> > tty_rcv = {sw_pfn =
> 0,
> > sw_arg = 0x0}, tty_rcvwakeup = 0}
> >
> > As you can see, I "hardwired" the rawInBuf to be 2048 characters in
> > size. And surprisingly enough, the Head is at offset 1161. This mean
> > that I received the first 130 bytes packet (init packet) and some
part
>
> > of the first data packet. But for some reason, termios lost sync and
> > lost all the next characters, stucking the semaphore and giving me
> > headaches :)
> >
> > What do you think???
> >
> > And by the way, you can't imagine how glad I am to have help from
> > all
> > of you on RTEMS forum.
> >
> > Etienne Fortin
> > Sensio
> >
> >
> >
> > -----Message d'origine-----
> > De : Thomas Doerfler [mailto:Thomas.Doerfler at imd-systems.de]
> > Envoyé : 4 novembre, 2004 16:09
> > À : Etienne Fortin; rtems-users at rtems.com
> > Cc : rtems-users at rtems.com
> > Objet : RE : Console problem update
> >
> >
> > Etienne,
> >
> > can you provide a snapshot of the termios data structures when your
> > console input gets stuck? What values do the buffer pointers have
> > for the raw input buffer?
> >
> > What baud rate are you using currently?
> >
> > What happens, if you write a simple application with two tasks, one
> > sending a 1K buffer to the console, one receiving it, and putting
> > the console into loopback mode (with a nice little wire between pin
> > 2 and 3 of your serial connector)? Does it also hand in that case?
> >
> > You really seem to have a nasty problem there...
> >
> > I have been using termios code for machine interfaces back with
> > RTEMS version 4.0.0, and I never had similar problems...
> >
> > wkr,
> > Thomas.
> >
> >
> > > I don'T know why I tought that even after releasing the sempahore,
> > > I was still stuck in the idle thread. To the contrary! Forcing the
> > > release of the semaphore make the task continue to execute code
> > > and
> I
> > > eventually get out of the code with an error (that's ok since the
> > > semaphore was forced to be released so no valid data is there
> > > waiting)...
> > >
> > > The question now is why the code is not notified of new
> > > characters.
> > > Is
> >
> > > it possible that the termios code, being designed for "human"
> > > interraction (at least I presume), can't cope with sustained
> > > binary data transfer and so I lost data and eventually the
> > > semaphore is struck waiting for characters that will never come?
> > > Is it possible?
> > >
> > > Etienne Fortin
> > > Sensio
> > >
> > >
> > >
> > >
> > >
> > > -----Message d'origine-----
> > > De : Joel Sherrill <joel at OARcorp.com>
> > > [mailto:joel.sherrill at OARcorp.com]
> > >
> > > Envoyé : 4 novembre, 2004 15:21
> > > À : Etienne Fortin
> > > Cc : rtems-users at rtems.com
> > > Objet : Re: Console problem update
> > >
> > >
> > > Etienne Fortin wrote:
> > > > Hello all, its me again, the console guy :)
> > > >
> > > > Little update for the ones that have an interest, or wish to
> > > > help
> > > > me on that matter.
> > >
> > > Is your interrupt an RTEMS ISR or a raw one directly connected to
> > > hardware? If you do not go through the RTEMS ISR wrapper, you
will
> > > NEVER schedule out of an interrupt.
> > >
> > > Also are you sure you are geting the serial port interrupts?
> > >
> > > > I tricked RTEMS to release the semaphore at each clock tick to
> > > > make sure the semaphore was the problem. And surprise surprise!
It
>
> > > > still hang in the idle thread!!!!!!!!!
> > > >
> > > > Theory: My task/scheduler/... config is fu***d up. Anyone here
> > > > thinks it can be possible? For what I know of the problem so
> > > > far, it
> seems
> > > > that as soon as the idle thread is entered, no other thread ever
> > gets
> > > > executed... Really seems a config problem to me...
> > > >
> > > > Idea someone?
> > > >
> > > > Etienne Fortin
> > > > Sensio
> > > >
> > >
> > >
> > > --
> > > Joel Sherrill, Ph.D. Director of Research &
Development
> > > joel at OARcorp.com On-Line Applications Research
> > > Ask me about RTEMS: a free RTOS Huntsville AL 35805
> > > Support Available (256) 722-9985
> > >
> > >
> >
> > --------------------------------------------
> > IMD Ingenieurbuero fuer Microcomputertechnik
> > Thomas Doerfler Herbststrasse 8
> > D-82178 Puchheim Germany
> > email: Thomas.Doerfler at imd-systems.de
> > PGP public key available at: http://www.imd- systems.de/pgp_keys.htm
> >
> >
>
> --------------------------------------------
> IMD Ingenieurbuero fuer Microcomputertechnik
> Thomas Doerfler Herbststrasse 8
> D-82178 Puchheim Germany
> email: Thomas.Doerfler at imd-systems.de
> PGP public key available at: http://www.imd- systems.de/pgp_keys.htm
>
>
--------------------------------------------
IMD Ingenieurbuero fuer Microcomputertechnik
Thomas Doerfler Herbststrasse 8
D-82178 Puchheim Germany
email: Thomas.Doerfler at imd-systems.de
PGP public key available at: http://www.imd- systems.de/pgp_keys.htm
More information about the users
mailing list