]> rtime.felk.cvut.cz Git - arc.git/blobdiff - system/kernel/counter.c
Merge with tip
[arc.git] / system / kernel / counter.c
index 16ba4191a26bdbd1b96568b1945385dd27de5daf..21b18fbca5ac486fffbce091cf19afc07b9c96e6 100644 (file)
@@ -191,12 +191,26 @@ void OsTick( void ) {
        if (Os_Arc_OsTickCounter >= 0) {\r
 \r
                OsCounterType *cPtr = Os_CfgGetCounter(Os_Arc_OsTickCounter);\r
+#if defined(USE_KERNEL_EXTRA)\r
+               OsPcbType *pcbPtr;\r
+#endif\r
 \r
                os_sys.tick++;\r
 \r
                cPtr->val = Os_CounterAdd( cPtr->val, Os_CounterGetMaxValue(cPtr), 1 );\r
 \r
-       //      os_sys.tick = cPtr->val;\r
+#if defined(USE_KERNEL_EXTRA)\r
+               /* Check sleep() (ST_WAITING) tasks */\r
+               TAILQ_FOREACH(pcbPtr, &os_sys.timerHead, timerEntry ) {\r
+                       --pcbPtr->timerDec;\r
+                       if( pcbPtr->timerDec <= 0 ) {\r
+                               /* Remove from the timer queue */\r
+                               TAILQ_REMOVE(&os_sys.timerHead, pcbPtr, timerEntry);\r
+                               /* ... and add to the ready queue */\r
+                               Os_TaskMakeReady(pcbPtr);\r
+                       }\r
+               }\r
+#endif\r
 #if OS_ALARM_CNT!=0\r
                Os_AlarmCheck(cPtr);\r
 #endif\r