Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
01/11/08 00:39
Read: times


 
#149289 - I have a doubt about that KEIL code.
Responding to: ???'s previous message
Just for curiosity - and also because I'm a tad interested on this.

The code:

/*------------------------------------------------
Received data interrupt.
------------------------------------------------*/

if (RI != 0)
  {
  RI = 0;
  if (((r_in - r_out) & ~(RBUF_SIZE-1)) == 0)
    {
    rbuf [r_in & (RBUF_SIZE-1)] = SBUF;
    r_in++;
    }
  }


Looks quite normal but what happens if the receive buffer gets full and the data is not read from the SBUF?

Will the thing stop generating RX interrupts because the data was not read?

According the "Bible" The thing will go back looking for another character and next interrupt will occur whether or not the data in SBUF was read. It is just replaced.

However - and I may be a tad paranoid here - it IS a good practise to tickle the hardware the same way every time when the interrupt arrives. So I would rewrite the code as:



if (RI != 0)
  {
  RI = 0;
  rbuf [r_in & (RBUF_SIZE-1)] = SBUF;
  if (((r_in - r_out) & ~(RBUF_SIZE-1)) == 0)
    {
    r_in++;
    }
  }


List of 26 messages in thread
TopicAuthorDate
Serial Problem            01/01/70 00:00      
   Can you post more information ?            01/01/70 00:00      
      more information            01/01/70 00:00      
         Too much information!            01/01/70 00:00      
         Some advice            01/01/70 00:00      
         while loop            01/01/70 00:00      
            Bad indenting trap!            01/01/70 00:00      
               Andu, Andy, how dare you ..            01/01/70 00:00      
            I don't think that's the problem.            01/01/70 00:00      
               you're right            01/01/70 00:00      
                  So, have you got it working yet?            01/01/70 00:00      
                     can't receive the 16 bytes            01/01/70 00:00      
                        Have you dealt with the atomicity issues ?            01/01/70 00:00      
                        Debugging            01/01/70 00:00      
                           details            01/01/70 00:00      
   Misleading comment            01/01/70 00:00      
      I too dislike the placement, even worse it is WRON            01/01/70 00:00      
   RI and TI are not mutually exclusive            01/01/70 00:00      
      ... but this is not a cause it will not work...            01/01/70 00:00      
         Yes...            01/01/70 00:00      
   Here is a sample code that is working ...            01/01/70 00:00      
      ... and here for the right processor            01/01/70 00:00      
         Wheel reinvention is -            01/01/70 00:00      
         I have a doubt about that KEIL code.            01/01/70 00:00      
            The Question is what do you want to loose?            01/01/70 00:00      
               No - I was just wondering the hardware            01/01/70 00:00      

Back to Subject List