diff --git a/include/prototypes.h b/include/prototypes.h index ec3645c..0eec7a9 100644 --- a/include/prototypes.h +++ b/include/prototypes.h @@ -162,7 +162,7 @@ extern status insert(pid32, qid16, char); /* in file insertd.c */ // extern status insertd(pid32, qid16, int32); -extern status insertd(pid32, qid16, char); +extern status insertd(pid32, qid16, uint16); /* in file intr.S */ extern intmask disable(void); @@ -514,8 +514,7 @@ extern syscall signal(sid32); extern syscall signaln(sid32, int32); /* in file sleep.c */ -// extern syscall sleepms(int32); -extern syscall sleep100ms(int32); /* avr atmega328p specific */ +extern syscall sleepms(int32); extern syscall sleep(int32); /* in file spicontrol.c */ diff --git a/include/queue.h b/include/queue.h index f86ce78..0ed8c8f 100644 --- a/include/queue.h +++ b/include/queue.h @@ -13,7 +13,7 @@ #define MINKEY 0x80000000 /* Min key that can be stored in queue */ struct qentry { /* One per process plus two per list */ - char qkey; /* Key on which the queue is ordered */ + uint16 qkey; /* Key on which the queue is ordered */ // int32 qkey; /* Key on which the queue is ordered */ qid16 qnext; /* Index of next process or tail */ qid16 qprev; /* Index of previous process or head */ diff --git a/system/clkhandler.c b/system/clkhandler.c index a2cb91b..c09bcdb 100644 --- a/system/clkhandler.c +++ b/system/clkhandler.c @@ -32,32 +32,21 @@ ISR(TIMER0_COMPA_vect) count1000 = 0; } - /* check if sleep queue is empty every 100ms */ + if(!isempty(sleepq)) { + /* sleepq nonempty, decrement the key of */ + /* topmost process on sleepq */ - if ((count1000 % 100) == 0) /* every 100ms */ - if(!isempty(sleepq)) { - /* sleepq nonempty, decrement the key of */ - /* topmost process on sleepq */ + if((--queuetab[firstid(sleepq)].qkey) == 0) { - if((--queuetab[firstid(sleepq)].qkey) == 0) { - - wakeup(); - } + wakeup(); } + } - /* our MCU is slow (16Mhz), so we do resched/preemption every 300ms */ - avr_ticks ++; - if (avr_ticks > 300) { -// if (avr_ticks > 10) { -// if (avr_ticks > 100) { - avr_ticks=0; - - /* Decrement the preemption counter */ - /* Reschedule if necessary */ - if((--preempt) == 0) { - preempt = QUANTUM; - resched(); - } + /* Decrement the preemption counter */ + /* Reschedule if necessary */ + if((--preempt) == 0) { + preempt = QUANTUM; + resched(); } } diff --git a/system/insertd.c b/system/insertd.c index e100818..bb0de70 100644 --- a/system/insertd.c +++ b/system/insertd.c @@ -9,7 +9,7 @@ status insertd( /* Assumes interrupts disabled */ pid32 pid, /* ID of process to insert */ qid16 q, /* ID of queue to use */ - char key /* Delay from "now" (in ms. * 100) */ + uint16 key /* Delay from "now" (in ms.) */ ) { int32 next; /* Runs through the delta list */ diff --git a/system/sleep.c b/system/sleep.c index 4f7eecb..c9d381a 100644 --- a/system/sleep.c +++ b/system/sleep.c @@ -15,17 +15,17 @@ syscall sleep( if ( (delay < 0) || (delay > MAXSECONDS) ) { return SYSERR; } - sleep100ms(10*delay); + sleepms(1000*delay); return OK; } /*------------------------------------------------------------------------ - * sleep100ms - Delay the calling process n x 100 milliseconds - * for example: 1 second = sleep100ms(10) + * sleepms - Delay the calling process n x 1000 milliseconds + * for example: 1 second = sleepms(1000) * avr atmega328p specific *------------------------------------------------------------------------ */ -syscall sleep100ms( +syscall sleepms( int32 delay /* Time to delay in msec. */ ) {