From 55a96adbb332e819532c8deb33505315eb275197 Mon Sep 17 00:00:00 2001 From: klueska Date: Tue, 21 Oct 2008 20:05:54 +0000 Subject: [PATCH] Changed to only do timer turnoff logic if desired via compiler-tie flag --- .../tosthreads/system/TinyThreadSchedulerP.nc | 50 +++++++++++-------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/tos/lib/tosthreads/system/TinyThreadSchedulerP.nc b/tos/lib/tosthreads/system/TinyThreadSchedulerP.nc index 9345bb76..45e63e70 100644 --- a/tos/lib/tosthreads/system/TinyThreadSchedulerP.nc +++ b/tos/lib/tosthreads/system/TinyThreadSchedulerP.nc @@ -61,6 +61,7 @@ implementation { //Thread queue for keeping track of threads waiting to run thread_queue_t ready_queue; +#ifdef TOSTHREADS_TIMER_OPTIMIZATION void task timerTask() { uint8_t temp; atomic temp = num_runnable_threads; @@ -69,6 +70,7 @@ implementation { if(temp > 1) call PreemptionAlarm.startOneShot(TOSTHREAD_PREEMPTION_PERIOD); } +#endif /* switch_threads() * This routine swaps the stack and allows a thread to run. @@ -138,8 +140,10 @@ implementation { void suspend(thread_t* thread) { //if there are no active threads, put the MCU to sleep //Then wakeup the TinyOS thread whenever the MCU wakes up again - num_runnable_threads--; - post timerTask(); + #ifdef TOSTHREADS_TIMER_OPTIMIZATION + num_runnable_threads--; + post timerTask(); + #endif sleepWhileIdle(); interrupt(thread); } @@ -149,17 +153,19 @@ implementation { * and decrementing any necessary variables used to keep track of * threads by the thread scheduler. */ - void stop(thread_t* t) { - int i; - t->state = TOSTHREAD_STATE_INACTIVE; - num_runnable_threads--; - post timerTask(); - for(i=0; ijoinedOnMe, i)) - call ThreadScheduler.wakeupThread(i); - } - signal ThreadCleanup.cleanup[t->id](); - } + void stop(thread_t* t) { + int i; + t->state = TOSTHREAD_STATE_INACTIVE; + #ifdef TOSTHREADS_TIMER_OPTIMIZATION + num_runnable_threads--; + post timerTask(); + #endif + for(i=0; ijoinedOnMe, i)) + call ThreadScheduler.wakeupThread(i); + } + signal ThreadCleanup.cleanup[t->id](); + } /* This executes and cleans up a thread */ @@ -205,8 +211,10 @@ implementation { if(t->state == TOSTHREAD_STATE_INACTIVE) { t->state = TOSTHREAD_STATE_READY; call ThreadQueue.enqueue(&ready_queue, t); - num_runnable_threads++; - post timerTask(); + #ifdef TOSTHREADS_TIMER_OPTIMIZATION + num_runnable_threads++; + post timerTask(); + #endif return SUCCESS; } } @@ -266,11 +274,13 @@ implementation { thread_t* t = call ThreadInfo.get[id](); if((t->state) == TOSTHREAD_STATE_SUSPENDED) { t->state = TOSTHREAD_STATE_READY; - if(t != tos_thread) { - call ThreadQueue.enqueue(&ready_queue, call ThreadInfo.get[id]()); - atomic num_runnable_threads++; - post timerTask(); - } + if(t != tos_thread) { + call ThreadQueue.enqueue(&ready_queue, call ThreadInfo.get[id]()); + #ifdef TOSTHREADS_TIMER_OPTIMIZATION + atomic num_runnable_threads++; + post timerTask(); + #endif + } return SUCCESS; } return FAIL; -- 2.39.2