Software Serial Research and Questions

Robin2:
It never was.

Never say "never" :wink: :
(Well, not an ISR itself, but called from an ISR.)

(multiple #ifdefs omitted here to simplify code)

SIGNAL(USART_RX_vect)
{
    unsigned char c  =  UDR0;
    store_char(c, &rx_buffer);
    serialEvent();
}

Then there was a version that set a flag:

SIGNAL(USART_RX_vect)
{
    unsigned char c  =  UDR0;
    store_char(c, &rx_buffer);
    serialEvent_flag = 1;
}
void serialEventRun(void)
{
  unsigned char flag, oldSREG;
#ifdef serialEvent_implemented
  oldSREG = SREG;
  noInterrupts();
  flag = serialEvent_flag;
  serialEvent_flag = 0;
  SREG = oldSREG;
  if (flag) serialEvent();
#endif
// same for Serial1 etc.
// ...
}

1.0-beta4 had the current model:

SIGNAL(USART_RX_vect)
{
    unsigned char c  =  UDR0;
    store_char(c, &rx_buffer);
}
void serialEventRun(void)
{
#ifdef serialEvent_implemented
  if (Serial.available()) serialEvent();
#endif
// same for Serial1 etc.
//...
}