diff options
Diffstat (limited to 'main.c')
-rw-r--r-- | main.c | 81 |
1 files changed, 31 insertions, 50 deletions
@@ -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){} } |