mirror of
https://github.com/arduino/Arduino.git
synced 2025-03-01 23:29:28 +01:00
Changing to a simpler mental model for serialEvent (Paul Stoffregen).
http://code.google.com/p/arduino/issues/detail?id=626
This commit is contained in:
parent
c9d4630d2b
commit
ab36bd5dbb
@ -88,7 +88,6 @@ inline void store_char(unsigned char c, ring_buffer *buffer)
|
|||||||
#else
|
#else
|
||||||
void serialEvent() __attribute__((weak));
|
void serialEvent() __attribute__((weak));
|
||||||
void serialEvent() {}
|
void serialEvent() {}
|
||||||
volatile static unsigned char serialEvent_flag = 0;
|
|
||||||
#define serialEvent_implemented
|
#define serialEvent_implemented
|
||||||
#if defined(USART_RX_vect)
|
#if defined(USART_RX_vect)
|
||||||
SIGNAL(USART_RX_vect)
|
SIGNAL(USART_RX_vect)
|
||||||
@ -110,20 +109,17 @@ inline void store_char(unsigned char c, ring_buffer *buffer)
|
|||||||
#error UDR not defined
|
#error UDR not defined
|
||||||
#endif
|
#endif
|
||||||
store_char(c, &rx_buffer);
|
store_char(c, &rx_buffer);
|
||||||
serialEvent_flag = 1;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(USART1_RX_vect)
|
#if defined(USART1_RX_vect)
|
||||||
void serialEvent1() __attribute__((weak));
|
void serialEvent1() __attribute__((weak));
|
||||||
void serialEvent1() {}
|
void serialEvent1() {}
|
||||||
volatile static unsigned char serialEvent1_flag = 0;
|
|
||||||
#define serialEvent1_implemented
|
#define serialEvent1_implemented
|
||||||
SIGNAL(USART1_RX_vect)
|
SIGNAL(USART1_RX_vect)
|
||||||
{
|
{
|
||||||
unsigned char c = UDR1;
|
unsigned char c = UDR1;
|
||||||
store_char(c, &rx_buffer1);
|
store_char(c, &rx_buffer1);
|
||||||
serialEvent1_flag = 1;
|
|
||||||
}
|
}
|
||||||
#elif defined(SIG_USART1_RECV)
|
#elif defined(SIG_USART1_RECV)
|
||||||
#error SIG_USART1_RECV
|
#error SIG_USART1_RECV
|
||||||
@ -132,13 +128,11 @@ inline void store_char(unsigned char c, ring_buffer *buffer)
|
|||||||
#if defined(USART2_RX_vect) && defined(UDR2)
|
#if defined(USART2_RX_vect) && defined(UDR2)
|
||||||
void serialEvent2() __attribute__((weak));
|
void serialEvent2() __attribute__((weak));
|
||||||
void serialEvent2() {}
|
void serialEvent2() {}
|
||||||
volatile static unsigned char serialEvent2_flag = 0;
|
|
||||||
#define serialEvent2_implemented
|
#define serialEvent2_implemented
|
||||||
SIGNAL(USART2_RX_vect)
|
SIGNAL(USART2_RX_vect)
|
||||||
{
|
{
|
||||||
unsigned char c = UDR2;
|
unsigned char c = UDR2;
|
||||||
store_char(c, &rx_buffer2);
|
store_char(c, &rx_buffer2);
|
||||||
serialEvent2_flag = 1;
|
|
||||||
}
|
}
|
||||||
#elif defined(SIG_USART2_RECV)
|
#elif defined(SIG_USART2_RECV)
|
||||||
#error SIG_USART2_RECV
|
#error SIG_USART2_RECV
|
||||||
@ -147,13 +141,11 @@ inline void store_char(unsigned char c, ring_buffer *buffer)
|
|||||||
#if defined(USART3_RX_vect) && defined(UDR3)
|
#if defined(USART3_RX_vect) && defined(UDR3)
|
||||||
void serialEvent3() __attribute__((weak));
|
void serialEvent3() __attribute__((weak));
|
||||||
void serialEvent3() {}
|
void serialEvent3() {}
|
||||||
volatile static unsigned char serialEvent3_flag = 0;
|
|
||||||
#define serialEvent3_implemented
|
#define serialEvent3_implemented
|
||||||
SIGNAL(USART3_RX_vect)
|
SIGNAL(USART3_RX_vect)
|
||||||
{
|
{
|
||||||
unsigned char c = UDR3;
|
unsigned char c = UDR3;
|
||||||
store_char(c, &rx_buffer3);
|
store_char(c, &rx_buffer3);
|
||||||
serialEvent3_flag = 1;
|
|
||||||
}
|
}
|
||||||
#elif defined(SIG_USART3_RECV)
|
#elif defined(SIG_USART3_RECV)
|
||||||
#error SIG_USART3_RECV
|
#error SIG_USART3_RECV
|
||||||
@ -161,38 +153,17 @@ inline void store_char(unsigned char c, ring_buffer *buffer)
|
|||||||
|
|
||||||
void serialEventRun(void)
|
void serialEventRun(void)
|
||||||
{
|
{
|
||||||
unsigned char flag, oldSREG;
|
|
||||||
#ifdef serialEvent_implemented
|
#ifdef serialEvent_implemented
|
||||||
oldSREG = SREG;
|
if (Serial.available()) serialEvent();
|
||||||
noInterrupts();
|
|
||||||
flag = serialEvent_flag;
|
|
||||||
serialEvent_flag = 0;
|
|
||||||
SREG = oldSREG;
|
|
||||||
if (flag) serialEvent();
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef serialEvent1_implemented
|
#ifdef serialEvent1_implemented
|
||||||
oldSREG = SREG;
|
if (Serial1.available()) serialEvent1();
|
||||||
noInterrupts();
|
|
||||||
flag = serialEvent1_flag;
|
|
||||||
serialEvent1_flag = 0;
|
|
||||||
SREG = oldSREG;
|
|
||||||
if (flag) serialEvent1();
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef serialEvent2_implemented
|
#ifdef serialEvent2_implemented
|
||||||
oldSREG = SREG;
|
if (Serial2.available()) serialEvent2();
|
||||||
noInterrupts();
|
|
||||||
flag = serialEvent2_flag;
|
|
||||||
serialEvent2_flag = 0;
|
|
||||||
SREG = oldSREG;
|
|
||||||
if (flag) serialEvent2();
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef serialEvent3_implemented
|
#ifdef serialEvent3_implemented
|
||||||
oldSREG = SREG;
|
if (Serial3.available()) serialEvent3();
|
||||||
noInterrupts();
|
|
||||||
flag = serialEvent3_flag;
|
|
||||||
serialEvent3_flag = 0;
|
|
||||||
SREG = oldSREG;
|
|
||||||
if (flag) serialEvent3();
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,6 +74,6 @@ class HardwareSerial : public Stream
|
|||||||
extern HardwareSerial Serial3;
|
extern HardwareSerial Serial3;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern void serialEventRun(void);
|
extern void serialEventRun(void) __attribute__((weak));
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -9,7 +9,7 @@ int main(void)
|
|||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
loop();
|
loop();
|
||||||
serialEventRun();
|
if (serialEventRun) serialEventRun();
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user