aboutsummaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c81
1 files changed, 31 insertions, 50 deletions
diff --git a/main.c b/main.c
index a2c8827..c4dadee 100644
--- a/main.c
+++ b/main.c
@@ -1,76 +1,57 @@
#include <stddef.h>
#include <stdio.h>
#include <avr/pgmspace.h>
-#include <sched/sched.h>
-#include <time/timer.h>
-#include <bug/panic.h>
-#include <bug/debug.h>
-#include <tshield/tshield.h>
-#include <collection/list.h>
-#include <serial/serial.h>
-#include "shell.h"
+#include <avr/interrupt.h>
+#include "task/task.h"
+#include "task/sched.h"
+#include "bug/panic.h"
+#include "bug/debug.h"
+#include "mcu/task/context.h"
+#include "tshield/tshield.h"
#define WAIT_CYCLES(cycles) for (volatile unsigned long i = 0; i < cycles; ++i) {}
-static struct list_head frozen = LIST_HEAD_INIT(frozen);
+struct list_head frozen = LIST_HEAD_INIT(frozen);
+
void freeze() __attribute__ ( ( naked ) );
void freeze() {
- cli();
- SAVE_CONTEXT();
- sleep_on(&frozen);
+ context_save();
+ sleep_queue(&frozen);
schedule();
- RESTORE_CONTEXT();
- sei();
- asm volatile ( "ret" );
-}
-
-void wake() __attribute__ ( ( naked ) );
-void wake() {
- cli();
- SAVE_CONTEXT();
- wake_all(&frozen);
- RESTORE_CONTEXT();
- sei();
- asm volatile ( "ret" );
+ context_restore();
}
-
void blink( char id) {
while(1) {
- debug_led(id,1);
- sleep(id * 300);
- debug_led(id,0);
- sleep(id * 300);
+ debug_led(id - 1,1);
+ WAIT_CYCLES((long) id * 30000);
+ debug_led(id - 1,0);
+ WAIT_CYCLES((long) id * 30000);
+ freeze();
}
-}
-
-
-#define READ_BUFFER_SIZE 64
-void read(char id) {
- serial_init(115200);
- stdout = &serial_out;
- stdin = &serial_in;
- shell();
+ panic();
}
-DECLARE_TASK(task1, STACK_SIZE, blink);
-DECLARE_TASK(task2, STACK_SIZE, blink);
-DECLARE_TASK(task3, STACK_SIZE, blink);
-DECLARE_TASK(task4, STACK_SIZE, read);
+
+DECLARE_TASK(task1, DEFAULT_STACK_SIZE, blink, 1);
+DECLARE_TASK(task2, DEFAULT_STACK_SIZE, blink, 2);
+DECLARE_TASK(task3, DEFAULT_STACK_SIZE, blink, 3);
+DECLARE_TASK(task4, DEFAULT_STACK_SIZE, blink, 4);
int main(int argc, char *argv[]) {
cli();
tshield_init();
- timer_init();
-
- spawn(&task1, 1);
- spawn(&task2, 2);
- spawn(&task3, 3);
- spawn(&task4, 4);
+
- timer_start();
+ spawn(&task1);
+ spawn(&task2);
+ spawn(&task3);
+ spawn(&task4);
+
+ sei();
sched_init();
+ panic(); //should never reach here
while(1){}
}