aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kernel/dmx.c2
-rw-r--r--kernel/kernel.c9
-rw-r--r--kernel/kernel.h2
3 files changed, 7 insertions, 6 deletions
diff --git a/kernel/dmx.c b/kernel/dmx.c
index f04fc59..37f0e22 100644
--- a/kernel/dmx.c
+++ b/kernel/dmx.c
@@ -36,7 +36,7 @@ struct pwmarg pwmargs[] = {
int
main()
{
- init();
+ init(NPRIO, NSEMA);
uart_init();
lcd_init();
diff --git a/kernel/kernel.c b/kernel/kernel.c
index 45cda4a..dfedb9b 100644
--- a/kernel/kernel.c
+++ b/kernel/kernel.c
@@ -51,11 +51,11 @@ TAILQ_HEAD(queue, task);
struct kern {
struct queue rq; /* run queue */
struct queue tq; /* time queue */
- struct queue wq[NSEMA]; /* wait queue */
+ struct queue *wq; /* wait queues */
struct task *idle;
struct task *cur; /* current task */
uint16_t cycles; /* clock high byte */
- uint8_t semaphore; /* bitfield */
+ uint16_t semaphore; /* bitmap */
} kern;
ISR(TIMER1_OVF_vect)
@@ -104,7 +104,7 @@ ISR(TIMER1_COMPA_vect, ISR_NAKED)
}
void
-init(void)
+init(uint8_t prio, uint8_t sema)
{
uint8_t i;
@@ -124,7 +124,8 @@ init(void)
TAILQ_INIT(&kern.rq);
TAILQ_INIT(&kern.tq);
- for (i = 0; i < NSEMA; i++)
+ kern.wq = calloc(sema, sizeof(struct queue));
+ for (i = 0; i < sema; i++)
TAILQ_INIT(&kern.wq[i]);
kern.idle = calloc(1, sizeof(struct task));
diff --git a/kernel/kernel.h b/kernel/kernel.h
index 37226be..e934e19 100644
--- a/kernel/kernel.h
+++ b/kernel/kernel.h
@@ -87,7 +87,7 @@
/* __BEGIN_DECLS */
-void init(void);
+void init(uint8_t prio, uint8_t sema);
void exec(void (*fun)(void *), void *args, uint8_t stack);
void wait(uint8_t chan);