Hi,

I have a strange behaviour regarding memory access between my user application 
and the driver i have developed I'd like to get some clarification on.

The development is all used on or1k arch.

On the application side, I have a buffer declared as:
#define PACKET_SIZE 256
volatile uint8_t __attribute__ ((aligned (32))) buf_rx[256];

Then I use the posix api function read to access the data I want to get from my 
driver as following:

rtems_task test_task_rx(rtems_task_argument arg)
{
  info_rx_t *info_rx;
  info_rx = (info_rx_t*)arg;

  while(true){
    memset((uint8_t*)buf_rx, 0xaa, SPWN_TS_PACKET_SIZE);
    printk("Waiting for packet...@0x%08X\r\n", buf_rx);
    size = read(info_rx->fd, (uint8_t*)&buf_rx[0], PACKET_SIZE);

    if(size > 0) {
      printk("Packet received with size <%d>", buf_rx[0], size);
      /* Print info */
      if(spwn_info_rx->show_header == true) {
        for(i = 0;i < info_rx->packet_len;i++) {
          printk("%02X ", buf_rx[1]);
          if((i%16) == 0) {
            printk("\r\n");
          }
         }
         printk("\b>\r\n");
       }
     }
   }
 }

>From my driver side I'm just iterating the buffer values by one to see the 
>update, i.e: First time it starts with [01 02 03..." and next time it starts 
>with [02 03 04...]. The strange thing is the first time I get a 'packet' it 
>looks great. But the second time, It shows a bunch of 0xaa values (from memset 
>before reading):

Packet received with size <256> header @ 0004D960: AA
AA AA AA ...
11 12 13 ...
AA AA AA ...
...

But looking at the memory area in gdb I see the correct values:
01 02 03 ...
11 12 13 ...
21 22 23 ...
...

Removing memset call only shows that the buffer is the same after first call to 
read. I can't figure out why. Does anyone have a explanation. Any help would be 
appreciated.

Thanks,
Inderjit




_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to