aboutsummaryrefslogtreecommitdiff
path: root/kernel/uart.c
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2012-02-24 14:31:15 +0000
committerDimitri Sokolyuk <demon@dim13.org>2012-02-24 14:31:15 +0000
commit2e846df799e47af67fe177472e0912f88e4f5146 (patch)
treee4bfb6db75a85609427d5fab41481cac258cd5e3 /kernel/uart.c
parent82b01d18481c7b41a585ad8fba2150fecc599ba1 (diff)
introduce run queue length, trying to predict next wakeup, still buggy
Diffstat (limited to 'kernel/uart.c')
-rw-r--r--kernel/uart.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/kernel/uart.c b/kernel/uart.c
index 8407113..9522808 100644
--- a/kernel/uart.c
+++ b/kernel/uart.c
@@ -33,6 +33,9 @@
FILE uart_stream = FDEV_SETUP_STREAM(uart_putchar, uart_getchar, _FDEV_SETUP_RW);
+enum { Tasks, Load };
+uint8_t udrie_flag = Tasks;
+
#ifdef USE_RXCIE
ISR(SIG_UART_RECV)
{
@@ -53,8 +56,14 @@ ISR(SIG_UART_RECV)
break;
case 'T':
UCSRB |= _BV(UDRIE);
+ udrie_flag = Tasks;
+ break;
+ case 'L':
+ UCSRB |= _BV(UDRIE);
+ udrie_flag = Load;
break;
case 't':
+ case 'l':
UCSRB &= ~_BV(UDRIE);
break;
case '\r':
@@ -68,7 +77,16 @@ ISR(SIG_UART_RECV)
ISR(SIG_UART_DATA)
{
- uint8_t r = running();
+ uint8_t r = 0;
+
+ switch (udrie_flag) {
+ case Tasks:
+ r = running();
+ break;
+ case Load:
+ r = load();
+ break;
+ }
UDR = r ? '0' + r : '.';
}