aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Odersky <jodersky@gmail.com>2014-04-03 19:23:49 +0200
committerJakob Odersky <jodersky@gmail.com>2014-04-03 19:23:49 +0200
commit465385009a324d5369abd0474f7bd55a88ed56d2 (patch)
tree5a4acaa0d0ab706c4e4587384279ac2b79992907
parentb6181e4a21b1bc3b5615604e175c6a297b661687 (diff)
downloadmux-465385009a324d5369abd0474f7bd55a88ed56d2.tar.gz
mux-465385009a324d5369abd0474f7bd55a88ed56d2.tar.bz2
mux-465385009a324d5369abd0474f7bd55a88ed56d2.zip
echo test
-rw-r--r--kernel/io/mcu/atmega2560/usart.c8
-rw-r--r--main.c33
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);