rtems_message_queue_receive

Steve Holle sholle at link-comm.com
Thu Nov 11 16:52:42 UTC 2004


Good catch about the interrupts.  I did find one interrupt that was a, 
shall we say, non-conformist, and fixed it but I'm still having 
problems.  Let me explain my problem with a little more detail.

Our system has two main threads, one running our fltk based GUI and the 
other running everything else.  We also have a number of threads running 
network functions, such as telnet, ftp, and a webserver.  All this has been 
running fine up to this point.

I'm trying to add a data stream that comes from one of the DSP cards in our 
system, streams data to a remote system over the network and receives data 
back from the network for output to the DSP.  The data transfer is 
initiated by an interrupt (conforming) generated by the DSP card which 
passes the DSP-to-net data via a blocking rtems-queue in another 
thread.  In the same interrupt, we are passing data from another 
rtems-queue to the DSP.  The last queue is filled in a blocking RX queue.

I've tried to fashion my code based on the telnet server that we have 
running, a very simple one connection telnet app.

If I comment out the code in the interrupt that sends the data to the queue 
that is read in the blocked thread waiting to transmit over the network, 
everything works fine.  As soon as I try to enable the queue write, the GUI 
locks up.  What I mean by that is that it becomes unresponsive and actually 
does not complete a screen refresh that is in progress.

I've read the GUI thread status from the streaming server with an assert if 
it is ever inactive and it always reads back active.  My other main thread 
seems to run fine.  I can communicate with it via a serial terminal and the 
response is snappy.

When we run the BMD, before the call in the interrupt we are able to break 
in the main while loop of the GUI.  After the call, the program will no 
longer break inside the GUI main while loop.

I'm not sure how to proceed from here.  Any ideas?

At 06:22 PM 11/10/2004, Ian Caddy wrote:
>Hi Steve,
>
>rtems_message_queue_send is allowed from conforming interrupts.  In other 
>words interrupts that use rtems_interrupt_catch to establish them.
>
>It is also important to note that any lower priority interrupt than the 
>one where you are calling RTEMS functions must also be conforming interrupts.
>
>When you say hangs, do you mean the processor stops (I think from memory 
>you are using a Coldfire?) you should be able to put a BDM onto your 
>system with gdb and run it normally until it stops.  Then get control back 
>in gdb and it should indicate where the more than likely bus error is, to 
>see if you can narrow down your problem.
>
>I hope this helps,
>
>Ian Caddy
>
>
>Steve Holle wrote:
>>I have what is probably a basic question about 
>>rtems_message_queue_receive.  If I am using rtems_message_queue_receive 
>>with the RTEMS_WAIT attribute set in a server thread, can I fill the 
>>thread using rtems_message_queue_send in an interrupt?  It seems almost 
>>as if the rtems_message_queue_send is being blocked by the 
>>rtems_message_queue_receive and my code hangs in the interrupt.
>>On the other hand, I may be doing something really stupid ;-}
>>Steve Holle
>>Link Communications, Inc.
>>1035 Cerise Rd.
>>Billings, MT  59101
>>sholle at link-comm.com
>
>Steve Holle
>Link Communications, Inc.
>1035 Cerise Rd.
>Billings, MT  59101
>sholle at link-comm.com  




More information about the users mailing list