diff options
-rw-r--r-- | Makefile | 6 | ||||
-rw-r--r-- | kernel/bug/debug.c | 6 | ||||
-rw-r--r-- | kernel/bug/include/bug/debug.h | 2 | ||||
-rw-r--r-- | kernel/bug/panic.c | 23 | ||||
-rw-r--r-- | kernel/sched/idle.c | 1 | ||||
-rw-r--r-- | kernel/sched/include/sched/sched.h | 12 | ||||
-rw-r--r-- | kernel/sched/mcu/atmega2560/context.c | 1 | ||||
-rw-r--r-- | kernel/sched/sched.c | 4 | ||||
-rw-r--r-- | kernel/tshield/include/tshield/tshield.h | 3 | ||||
-rw-r--r-- | kernel/tshield/mcu/atmega2560/tshield.c (renamed from kernel/tshield/tshield.c) | 25 | ||||
-rw-r--r-- | main.c | 9 |
11 files changed, 42 insertions, 50 deletions
@@ -83,11 +83,11 @@ kernel/%.o: kernel/%.c # Utility rules -upload: target - $(AVRDUDE) $(AVRDUDEFLAGS) -U flash:w:$(TARGET).hex:i - size: target $(AVRSIZE) --format=avr --mcu=$(MCU) $(TARGET).elf + +upload: target + $(AVRDUDE) $(AVRDUDEFLAGS) -U flash:w:$(TARGET).hex:i monitor: cu -l $(SERIAL) -s $(BAUD) --parity=none -h diff --git a/kernel/bug/debug.c b/kernel/bug/debug.c deleted file mode 100644 index 10a67d8..0000000 --- a/kernel/bug/debug.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "bug/debug.h" -#include "tshield/tshield.h" - -void debug_led(int led, int value) { - tshield_led(led, value); -}
\ No newline at end of file diff --git a/kernel/bug/include/bug/debug.h b/kernel/bug/include/bug/debug.h index 937ff2c..854f4c6 100644 --- a/kernel/bug/include/bug/debug.h +++ b/kernel/bug/include/bug/debug.h @@ -1,8 +1,6 @@ #ifndef DEBUG_H #define DEBUG_H -#define DEBUG_LEDS 4 - void debug_led(int led, int value); #endif
\ No newline at end of file diff --git a/kernel/bug/panic.c b/kernel/bug/panic.c deleted file mode 100644 index c82d0f0..0000000 --- a/kernel/bug/panic.c +++ /dev/null @@ -1,23 +0,0 @@ -#include "bug/panic.h" -#include "bug/debug.h" -#include <avr/interrupt.h> - -static inline void wait() { - for (volatile long i = 0; i < 20000; ++i) {}; -} - -void panic() { - cli(); - while(1) { - for(int i = 0; i < DEBUG_LEDS; ++i) { - debug_led((i - 1) % DEBUG_LEDS, 0); - debug_led(i, 1); - wait(); - } - for(int i = DEBUG_LEDS - 1; i >= 0; --i) { - debug_led((i + 1) % DEBUG_LEDS, 0); - debug_led(i, 1); - wait(); - } - } -}
\ No newline at end of file diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c index 18ccdd5..d55d694 100644 --- a/kernel/sched/idle.c +++ b/kernel/sched/idle.c @@ -6,7 +6,6 @@ void idle_entry(char args) { while(1) { - tshield_led(TSHIELD_LED_IDLE,1); set_sleep_mode(SLEEP_MODE_IDLE); cli(); sleep_enable(); diff --git a/kernel/sched/include/sched/sched.h b/kernel/sched/include/sched/sched.h index d63b78c..a7f45ee 100644 --- a/kernel/sched/include/sched/sched.h +++ b/kernel/sched/include/sched/sched.h @@ -36,7 +36,7 @@ struct tcb_t { * Note: for a task to be scheduled, it must first be spawned (see spawn()). */ #define DECLARE_TASK(name, stack_size, entry_function) \ - static char volatile declared_stack_##name[stack_size]; \ + static char declared_stack_##name[stack_size]; \ static struct tcb_t name = { \ .sp = 0, \ .mem_low = declared_stack_##name, \ @@ -86,6 +86,11 @@ static inline void wake_all(struct list_head* queue) { */ void sched_init(); +/** + * Enters the scheduler, setting current to the next runnable task. + */ +void schedule(); + /** * Ticks the scheduler. */ @@ -93,11 +98,6 @@ inline void sched_tick() { schedule(); //in a round-robin scheduler, scheduling is called after every tick } -/** - * Enters the scheduler, setting current to the next runnable task. - */ -void schedule(); - /** * Initializes a given task and adds it to the ready queue. */ diff --git a/kernel/sched/mcu/atmega2560/context.c b/kernel/sched/mcu/atmega2560/context.c index 7a88b33..ef7e172 100644 --- a/kernel/sched/mcu/atmega2560/context.c +++ b/kernel/sched/mcu/atmega2560/context.c @@ -4,7 +4,6 @@ char* init_stack(const char* const mem_low, const char* const mem_high, void (*e char* sp = (char*) mem_high; unsigned long address = (unsigned long) entry; - *sp = (char) 0x1; sp--; *sp = (char) 0x2; diff --git a/kernel/sched/sched.c b/kernel/sched/sched.c index 8406b8d..bc3b30d 100644 --- a/kernel/sched/sched.c +++ b/kernel/sched/sched.c @@ -37,11 +37,11 @@ void spawn(struct tcb_t* const tcb, char args) { list_add_tail(&tcb->q, &ready); } -void yield(void) { +void yield() { SAVE_CONTEXT(); schedule(); RESTORE_CONTEXT(); - asm volatile ( "ret" ); + RETURN(); } void freeze() { diff --git a/kernel/tshield/include/tshield/tshield.h b/kernel/tshield/include/tshield/tshield.h index 2624131..b485ad2 100644 --- a/kernel/tshield/include/tshield/tshield.h +++ b/kernel/tshield/include/tshield/tshield.h @@ -32,7 +32,8 @@ * */ - #define TSHIELD_LED_IDLE 0 +#define DEBUG_LEDS 4 +#define DEBUG_LED_IDLE 0 void tshield_init(); diff --git a/kernel/tshield/tshield.c b/kernel/tshield/mcu/atmega2560/tshield.c index ccf234d..4c1e150 100644 --- a/kernel/tshield/tshield.c +++ b/kernel/tshield/mcu/atmega2560/tshield.c @@ -23,7 +23,6 @@ void tshield_init() { PORTB &= ~(1 << 6); tshield_init_servo(); - } #define WAIT_VALUE 20000 @@ -112,4 +111,28 @@ void tshield_servo(unsigned char angle) { unsigned long k = (unsigned long) angle; unsigned long counter = (450 * k) / 255 + 150; OCR1A = (unsigned int) counter; +} + +void debug_led(int led, int value) { + tshield_led(led, value); +} + +static inline void _wait() { + for (volatile long i = 0; i < 20000; ++i) {}; +} + +void panic() { + cli(); + while(1) { + for(int i = 0; i < DEBUG_LEDS; ++i) { + debug_led((i - 1) % DEBUG_LEDS, 0); + debug_led(i, 1); + _wait(); + } + for(int i = DEBUG_LEDS - 1; i >= 0; --i) { + debug_led((i + 1) % DEBUG_LEDS, 0); + debug_led(i, 1); + _wait(); + } + } }
\ No newline at end of file @@ -3,17 +3,18 @@ #include <time/timer.h> #include <bug/panic.h> #include <bug/debug.h> +#include <tshield/tshield.h> #define WAIT_CYCLES(cycles) for (volatile unsigned long i = 0; i < cycles; ++i) {} void blink( char id) { while(1) { debug_led(id,1); - //yield(); - WAIT_CYCLES(20000); + yield(); + WAIT_CYCLES(5000); debug_led(id,0); - //yield(); - WAIT_CYCLES(20000); + yield(); + WAIT_CYCLES(5000); } } |