aboutsummaryrefslogtreecommitdiff
path: root/kernel/kernel.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/kernel.c')
-rw-r--r--kernel/kernel.c32
1 files changed, 22 insertions, 10 deletions
diff --git a/kernel/kernel.c b/kernel/kernel.c
index b8d2526..5d74199 100644
--- a/kernel/kernel.c
+++ b/kernel/kernel.c
@@ -75,16 +75,6 @@ ISR(TIMER1_COMPA_vect, ISR_NAKED)
PORTB ^= _BV(PB1); /* DEBUG */
#endif
- if (kernel.current == kernel.idle) {
- /* drop 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 */
- TAILQ_REMOVE(&kernel.runq, kernel.current, r_link);
- TAILQ_INSERT_TAIL(&kernel.runq, kernel.current, r_link);
- }
-
/* release waiting tasks */
TAILQ_FOREACH_SAFE(tp, &kernel.timeq, t_link, tmp) {
if (DISTANCE(tp->release, now) >= 0) {
@@ -95,6 +85,16 @@ ISR(TIMER1_COMPA_vect, ISR_NAKED)
break;
}
+ if (kernel.current == kernel.idle) {
+ /* drop 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 */
+ 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)) {
TAILQ_INSERT_TAIL(&kernel.runq, kernel.idle, r_link);
@@ -287,3 +287,15 @@ running(void)
{
return kernel.current - kernel.idle;
}
+
+uint8_t
+rqlen(void)
+{
+ return kernel.rqlen;
+}
+
+uint8_t
+semaphore(void)
+{
+ return kernel.semaphore;
+}