aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2012-03-13 12:47:39 +0000
committerDimitri Sokolyuk <demon@dim13.org>2012-03-13 12:47:39 +0000
commit0c7070b409e724236f86b0d995f815b2dd02b900 (patch)
treeb1db168921bb08d7105007a90499f78593a32df3
parentc1a34b0614ab9e24570338ac4c5aab1c8366a6b2 (diff)
remove rqlen again
remove auxiliary functions
-rw-r--r--kernel/kernel.c56
-rw-r--r--kernel/kernel.h2
-rw-r--r--kernel/rgb.c4
-rw-r--r--kernel/uart.c18
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 <stdint.h>
#include <stdio.h>
#include <avr/io.h>
-#include <avr/wdt.h>
#include <avr/interrupt.h>
#include <util/setbaud.h>
#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 : '.';
}