diff options
| -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;  | 
