volatile in struct

Juergen Zeller juergen.zeller at argovision.de
Mon Feb 16 16:32:50 UTC 2004

Hello all,

I'm confused, I need help from the specialists!

I'm using rtems4.6.0 with an i386ex board. I was looking for an error 
for a while and now I figured out that it depends on a volatile 
definition in the following manner:

#if 0
#define VOLATILE /*THIS WORKS for millions of packets without the 
printk-msg 'lost bytes...' */
#define VOLATILE volatile /*here I get the printk-msg 'lost bytes...' 
sometimes (about once per 2000 packets)*/

typedef struct {

unsigned char txbuf[256];
VOLATILE unsigned char txwr; // tx write pointer
VOLATILE unsigned char txrd; // tx read pointer
VOLATILE unsigned char txcount; // tx byte counter
VOLATILE unsigned char txmsgcount; // tx packet counter

static rtems_task tx_task (rtems_task_argument arg)
while (1) {

rtems_interrupt_disable (l);
com->txcount -= count;
rtems_interrupt_enable (l);

int send (MS3_COMDATA *com, something else )
rtems_semaphore_obtain (com->sema, RTEMS_NO_TIMEOUT, 0);

/* if the last message was sent there shouldn't remain any bytes in the 
if (!com->txmsgcount && com->txcount) {
printk ("%d lost bytes in txbuffer[%d](%d)\n", com->txcount, port, 
com->txcount = 0;
... /*Code for putting it into txbuf*/

rtems_semaphore_release (com->sema);


Can anyone out there explain whats going on here? I never thought that 
volatile could be responsible for errors. Is it because it's inside a 



More information about the users mailing list