[Date Prev][Date Next] [Chronological] [Thread] [Top]

[rtl] rtl1.1/2.0.36 freezing using shmem



Hallo,

I'm using shared memory described in 
<http://www.isd.cme.nist.gov/projects/emc/shmem.html> 
"Using Shared Memory in Real-Time Linux" from Frederick M. Proctor.
I expanded the structures for using data like this inside
common.h:
...
typedef struct 
{
  unsigned int inuse;
  int arg1;
  double arg2;
  double LUT[4096];	/* my LoockUpTable for DAU */
} MY_DATA;
...
typedef struct 
{
  MY_COMMAND cmd;
  MY_DATA data;
  MY_STATUS status;
  MY_ERROR error;
} MY_STRUCT;
...

inside rt_process.c I wrote:

static void task_code(int t)
{
...
  for (;;)
    {
	...


	my_struct.status.heartbeat++;

	/* DAQ - Only for fun at moment */
    	my_struct.data.arg1=0;
    	my_struct.data.arg2=0.0;
    
    	/* write data to shmem */
    	if (0 == my_struct_ptr->data.inuse)
      		memcpy(&my_struct_ptr->data, 
			&my_struct.data, 
			sizeof(MY_DATA));

	...
	rt_task_wait();
    }
}

with the result, my system is frozen for a long time 
(mostly a hard reset was following..) while insmod rtmod

# time insmod rtmod.o && rmmod rtmod && echo DONE
real	0m0.010s
user	0m0.010s
sys	0m0.000s
DONE

This is was time says. What is wrong with this code? 
or is there another/better/faster way? Without this
structure data all things are fine.

Olaf
--- [rtl] ---
To unsubscribe:
echo "unsubscribe rtl" | mail majordomo@rtlinux.cs.nmt.edu OR
echo "unsubscribe rtl <Your_email>" | mail majordomo@rtlinux.cs.nmt.edu
----
For more information on Real-Time Linux see:
http://www.rtlinux.org/~rtlinux/