From 465385009a324d5369abd0474f7bd55a88ed56d2 Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Thu, 3 Apr 2014 19:23:49 +0200 Subject: echo test --- kernel/io/mcu/atmega2560/usart.c | 8 ++++---- main.c | 33 +++++++++++---------------------- 2 files changed, 15 insertions(+), 26 deletions(-) diff --git a/kernel/io/mcu/atmega2560/usart.c b/kernel/io/mcu/atmega2560/usart.c index 381f403..6f59787 100644 --- a/kernel/io/mcu/atmega2560/usart.c +++ b/kernel/io/mcu/atmega2560/usart.c @@ -134,8 +134,8 @@ ISR(USART0_UDRE_vect) { } //called when byte is received -ISR(USART0_RX_vect, ISR_NAKED) { - context_save(); +ISR(USART0_RX_vect) { + //context_save(); struct usart_private* priv = (struct usart_private*) usart0.private_data; @@ -143,6 +143,6 @@ ISR(USART0_RX_vect, ISR_NAKED) { rbuffer_write(&priv->rx_buffer, c); wake_all_queue(&priv->rx_queue); - context_restore(); - asm volatile ("reti"); + //context_restore(); + //asm volatile ("reti"); } \ No newline at end of file diff --git a/main.c b/main.c index 0ed45da..9f2b7fb 100644 --- a/main.c +++ b/main.c @@ -16,39 +16,29 @@ #define WAIT_CYCLES(cycles) for (volatile unsigned long i = 0; i < cycles; ++i) {} -void writer() { - - char* buffer = "hello world"; - size_t length = 11; - +void worker() { + char buffer[64]; while(1) { debug_led(1, 0); - WAIT_CYCLES(300000); - debug_led(1, 1); - write(&usart0, buffer, length); - } -} + debug_led(2, 0); -void reader() { - char in; + int length = read(&usart0, buffer, 64); - while(1) { - debug_led(2, 0); - debug_led(3, 0); - if (read(&usart0, &in, 1) >= 0) { - debug_led(2, 1); + if (length > 0) { + debug_led(1, 1); + char lstr = ((char) length) + '0'; + write(&usart0, &lstr, sizeof(lstr)); } else { - debug_led(3, 1); + debug_led(2, 1); WAIT_CYCLES(30000); } - } } + DECLARE_TASK(task_idle, IDLE_STACK_SIZE, idle_entry, 0); -DECLARE_TASK(task1, DEFAULT_STACK_SIZE, writer, 1); -DECLARE_TASK(task2, DEFAULT_STACK_SIZE, reader, 2); +DECLARE_TASK(task1, DEFAULT_STACK_SIZE, worker, 1); int main(int argc, char *argv[]) { cli(); @@ -59,7 +49,6 @@ int main(int argc, char *argv[]) { spawn_idle(&task_idle); spawn(&task1); - spawn(&task2); sei(); clock_init(10, schedule); -- cgit v1.2.3