diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/cpu/irq.c | 7 | ||||
-rw-r--r-- | src/sys/schedule.c | 4 |
2 files changed, 9 insertions, 2 deletions
diff --git a/src/cpu/irq.c b/src/cpu/irq.c index 1b5e09f..fd0cbd5 100644 --- a/src/cpu/irq.c +++ b/src/cpu/irq.c @@ -12,6 +12,7 @@ #include <util/time.h> void localtest(void); +void uarttest(unsigned char); void c_irq_handler(void) { @@ -90,6 +91,7 @@ void c_irq_handler(void) } else { cmd[off] = (char) data; off += 1; + add_thread(uarttest, (void*)data, 2); } } else if (off == 2048) { if (data == 0x0D) { @@ -246,3 +248,8 @@ unsigned long c_fiq_handler(void) void localtest(void) { } + +void uarttest(unsigned char a) +{ + uart_char(a); +} diff --git a/src/sys/schedule.c b/src/sys/schedule.c index ebf60bc..ad7feec 100644 --- a/src/sys/schedule.c +++ b/src/sys/schedule.c @@ -77,9 +77,9 @@ void add_thread(void* pc, void* arg, unsigned char priority) if (r.sp) { thread->sp_base = r.idx; unsigned long* argp = r.sp; - argp -= 1; - *argp = (unsigned long)arg; // Set r0 to the argument argp -= 13; + *argp = (unsigned long)arg; // Set r0 to the argument + argp -= 1; *(unsigned long**)argp = (unsigned long*)cleanup; // Set lr to the cleanup function thread->sp = (void*)argp; thread->status = THREAD_READY; |