From 0c7070b409e724236f86b0d995f815b2dd02b900 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 13 Mar 2012 12:47:39 +0000 Subject: remove rqlen again remove auxiliary functions --- kernel/kernel.c | 56 ++++++++++---------------------------------------------- kernel/kernel.h | 2 -- kernel/rgb.c | 4 ++-- kernel/uart.c | 18 ++---------------- 4 files changed, 14 insertions(+), 66 deletions(-) diff --git a/kernel/kernel.c b/kernel/kernel.c index edfc058..eb79413 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -28,8 +28,6 @@ #include "stack.h" #include "queue.h" -#define DEBUG 0 - enum State { TERMINATED, RUNQ, TIMEQ, WAITQ, SIGNAL }; #define LO8(x) ((uint8_t)((uint16_t)(x))) @@ -53,7 +51,6 @@ struct kernel { uint16_t cycles; uint8_t *freemem; uint8_t semaphore; - uint8_t rqlen; } kernel; ISR(TIMER1_OVF_vect) @@ -71,37 +68,30 @@ ISR(TIMER1_COMPA_vect, ISR_NAKED) PUSH_ALL(); now = NOW(kernel.cycles, TCNT1); - #if DEBUG - PORTB ^= _BV(PB1); /* DEBUG */ - #endif - /* release waiting tasks */ TAILQ_FOREACH_SAFE(tp, &kernel.timeq, t_link, tmp) { if (DISTANCE(tp->release, now) >= 0) { TAILQ_REMOVE(&kernel.timeq, tp, t_link); TAILQ_INSERT_TAIL(&kernel.runq, tp, r_link); - ++kernel.rqlen; } else break; } - if (kernel.current == kernel.idle) { - /* drop idle */ + /* drop idle */ + if (kernel.current == kernel.idle) TAILQ_REMOVE(&kernel.runq, kernel.current, r_link); - --kernel.rqlen; - } else if (kernel.current == TAILQ_FIRST(&kernel.runq)) { - /* runq not changed && not empty -> yield */ + + /* runq not changed && not empty -> yield */ + if (kernel.current == TAILQ_FIRST(&kernel.runq)) { TAILQ_REMOVE(&kernel.runq, kernel.current, r_link); TAILQ_INSERT_TAIL(&kernel.runq, kernel.current, r_link); } - /* idle if nothing to run */ - if (TAILQ_EMPTY(&kernel.runq)) { + /* go idle if nothing to do */ + if (TAILQ_EMPTY(&kernel.runq)) TAILQ_INSERT_TAIL(&kernel.runq, kernel.idle, r_link); - ++kernel.rqlen; - } - nexthit = UINT16_MAX; + nexthit = INT16_MAX; /* max time slice */ if ((tp = TAILQ_FIRST(&kernel.timeq))) { dist = DISTANCE(now, tp->release); @@ -109,8 +99,6 @@ ISR(TIMER1_COMPA_vect, ISR_NAKED) nexthit = dist; } - nexthit >>= kernel.rqlen; - OCR1A = (uint16_t)(now + nexthit); /* switch context */ @@ -136,10 +124,6 @@ init(uint8_t stack) TIMSK = (_BV(OCIE1A) | _BV(TOIE1)); /* enable interrupts */ OCR1A = 0; /* default overflow */ - #if DEBUG - DDRB |= _BV(PB1); /* DEBUG */ - #endif - TAILQ_INIT(&kernel.runq); TAILQ_INIT(&kernel.timeq); for (i = 0; i < SEMAPHORES; i++) @@ -154,7 +138,6 @@ init(uint8_t stack) kernel.cycles = 0; kernel.freemem = (uint8_t *)(RAMEND - stack); kernel.semaphore = 0; - kernel.rqlen = 0; sei(); } @@ -187,7 +170,6 @@ exec(void (*fun)(void *), void *args, uint8_t stack) tp->release = 0; tp->sp = (uint16_t)sp; /* SP */ TAILQ_INSERT_TAIL(&kernel.runq, tp, r_link); - ++kernel.rqlen; SCHEDULE(); } @@ -200,12 +182,10 @@ wait(uint8_t chan) if (kernel.semaphore & _BV(chan)) { /* semaphore busy, go into wait queue */ TAILQ_REMOVE(&kernel.runq, kernel.current, r_link); - --kernel.rqlen; TAILQ_INSERT_TAIL(&kernel.waitq[chan], kernel.current, w_link); - SCHEDULE(); } else { - /* occupy semaphore */ + /* occupy semaphore and continue */ kernel.semaphore |= _BV(chan); sei(); } @@ -222,11 +202,9 @@ signal(uint8_t chan) /* release first waiting task from wait queue */ TAILQ_REMOVE(&kernel.waitq[chan], tp, w_link); TAILQ_INSERT_TAIL(&kernel.runq, tp, r_link); - ++kernel.rqlen; - SCHEDULE(); } else { - /* clear semaphore */ + /* clear semaphore and continue */ kernel.semaphore &= ~_BV(chan); sei(); } @@ -240,7 +218,6 @@ sleep(uint32_t sec, uint32_t usec) cli(); TAILQ_REMOVE(&kernel.runq, kernel.current, r_link); - --kernel.rqlen; kernel.current->release += SEC(sec) + USEC(usec); /* find right position on time queue */ @@ -270,7 +247,6 @@ suspend(void) cli(); TAILQ_REMOVE(&kernel.runq, kernel.current, r_link); - --kernel.rqlen; SCHEDULE(); } @@ -287,18 +263,6 @@ running(void) return kernel.current - kernel.idle; } -uint8_t -rqlen(void) -{ - return kernel.rqlen; -} - -uint8_t -semaphore(void) -{ - return kernel.semaphore; -} - void reboot(void) { diff --git a/kernel/kernel.h b/kernel/kernel.h index 1789b36..a05456d 100644 --- a/kernel/kernel.h +++ b/kernel/kernel.h @@ -95,8 +95,6 @@ void yield(void); uint32_t now(void); uint8_t running(void); -uint8_t rqlen(void); -uint8_t semaphore(void); void reboot(void); diff --git a/kernel/rgb.c b/kernel/rgb.c index ac68429..a98d4b2 100644 --- a/kernel/rgb.c +++ b/kernel/rgb.c @@ -63,13 +63,13 @@ pwm(void *arg) /* on */ if (t) { PORTB |= _BV(a->pin); - sleep(0, t * 80L); + sleep(0, t * 80); } /* off */ if ((t = UINT8_MAX - t)) { PORTB &= ~_BV(a->pin); - sleep(0, t * 80L); + sleep(0, t * 80); } } } diff --git a/kernel/uart.c b/kernel/uart.c index 80ff2b4..ec015e5 100644 --- a/kernel/uart.c +++ b/kernel/uart.c @@ -25,7 +25,6 @@ #include #include #include -#include #include #include #include "kernel.h" @@ -33,8 +32,6 @@ FILE uart_stream = FDEV_SETUP_STREAM(uart_putchar, uart_getchar, _FDEV_SETUP_RW); -uint8_t (*data)(void); - #ifdef USE_RXCIE ISR(SIG_UART_RECV) { @@ -47,27 +44,16 @@ ISR(SIG_UART_RECV) /* FALLTHROUGH */ case 'R': /* reboot */ case '-': /* reboot */ - wdt_enable(WDTO_15MS); + reboot(); break; case 'D': /* dump */ for (p = (uint8_t *)0; p <= (uint8_t *)RAMEND; p++) uart_putchar(*p, NULL); break; - case 'L': - data = rqlen; - UCSRB |= _BV(UDRIE); - break; case 'T': - data = running; - UCSRB |= _BV(UDRIE); - break; - case 'S': - data = semaphore; UCSRB |= _BV(UDRIE); break; - case 'l': case 't': - case 's': UCSRB &= ~_BV(UDRIE); break; case '\r': @@ -81,7 +67,7 @@ ISR(SIG_UART_RECV) ISR(SIG_UART_DATA) { - uint8_t r = data(); + uint8_t r = running(); UDR = r ? '0' + r : '.'; } -- cgit v1.2.3