]> rtime.felk.cvut.cz Git - arc.git/commitdiff
Pass on all test cases in 'Alarms' and 'Error handling,...'
authortojo <tobias.johansson@arccore.com>
Fri, 9 Jul 2010 09:45:51 +0000 (11:45 +0200)
committertojo <tobias.johansson@arccore.com>
Fri, 9 Jul 2010 09:45:51 +0000 (11:45 +0200)
include/Os.h
system/kernel/alarm.c
system/kernel/event.c
system/kernel/makefile
system/kernel/task.c

index c30bfb2862622ac00a2495bbf32249acf177f099..076b53372dd4ad7e7ad8962722d91e0e659dafe3 100644 (file)
@@ -144,6 +144,7 @@ void StartOS( AppModeType Mode );
 \r
 ApplicationType GetApplicationID( void );\r
 ISRType GetISRID( void );\r
+StatusType GetActiveApplicationMode( AppModeType* mode);\r
 \r
 typedef int8_t Os_IntCounterType;\r
 \r
index ae1062d911c98ac54f6422ba6a4c90c96b87fd73..237eff73661a05162462908ce42fdb1d5de906c0 100644 (file)
@@ -162,16 +162,14 @@ StatusType SetAbsAlarm(AlarmType AlarmId, TickType Start, TickType Cycle) {
                /** @req OS304 */\r
                rv =  E_OS_VALUE;\r
                goto err;\r
-       } else {\r
-               if(  Cycle == 0 ||\r
-                       (Cycle >= COUNTER_MIN_CYCLE(aPtr)) ||\r
-                       (Cycle <= COUNTER_MAX(aPtr)) ) {\r
-                       /* OK */\r
-               } else {\r
-                       /** @req OS304 */\r
-                       rv =  E_OS_VALUE;\r
-                       goto err;\r
-               }\r
+       }\r
+\r
+       if( Cycle != 0 &&\r
+               ( (Cycle < COUNTER_MIN_CYCLE(aPtr)) ||\r
+                 (Cycle > COUNTER_MAX(aPtr)) ) ) {\r
+               /** @req OS304 */\r
+               rv =  E_OS_VALUE;\r
+               goto err;\r
        }\r
 \r
        Irq_Save(flags);\r
index 67719dfa28c0a40f5a9ada7ffd6a9a77adca5d5f..cfa0f783faeeb02067e2f343d4706e70121eb35e 100644 (file)
@@ -67,10 +67,13 @@ StatusType WaitEvent( EventMaskType Mask ) {
        if( !(curr_pcb->ev_set & Mask) ) {\r
 \r
                curr_pcb->ev_wait = Mask;\r
-               Os_TaskMakeWaiting(curr_pcb);\r
 \r
                if ( Os_SchedulerResourceIsFree() ) {\r
+                       POSTTASKHOOK();\r
+                       Os_TaskMakeWaiting(curr_pcb);\r
                        Os_Dispatch(0);\r
+               } else {\r
+                       Os_TaskMakeWaiting(curr_pcb);\r
                }\r
        }\r
 \r
index cb2f68e1768064344d2ecd94f2742aec315fc0bc..81ece28a01198aecefe2928bc39d8a05302b9aee 100644 (file)
@@ -26,6 +26,7 @@ obj-y += sys_tick.o
 #obj-y += stack.o\r
 obj-y += isr.o\r
 obj-y += os_arctest.o\r
+obj-y += application.o\r
 \r
 \r
 # These are VERY cpu dependent.. remove\r
index bcf3cee60669ce5df020522c87d91dbf4036db0a..534de83dd61e07c26c0ef24304b23be646abf934 100644 (file)
@@ -36,12 +36,12 @@ _Bool os_pcb_pid_valid( OsPcbType *restrict pcb ) {
 void Os_TaskStartExtended( void ) {\r
        OsPcbType *pcb;\r
 \r
-       PRETASKHOOK();\r
-\r
        pcb = Os_TaskGetCurrent();\r
        Os_ResourceGetInternal();\r
        Os_TaskMakeRunning(pcb);\r
 \r
+       PRETASKHOOK();\r
+\r
        Os_ArchFirstCall();\r
 \r
        /** @req OS239 */\r
@@ -67,11 +67,12 @@ void Os_TaskStartExtended( void ) {
 void Os_TaskStartBasic( void ) {\r
        OsPcbType *pcb;\r
 \r
-       PRETASKHOOK();\r
-\r
        pcb = Os_TaskGetCurrent();\r
        Os_ResourceGetInternal();\r
        Os_TaskMakeRunning(pcb);\r
+\r
+       PRETASKHOOK();\r
+\r
        Os_ArchFirstCall();\r
 \r
 \r
@@ -301,16 +302,17 @@ void Os_Dispatch( _Bool force ) {
        currPcbPtr = Os_TaskGetCurrent();\r
        /* Swap if we found any process or are forced (multiple activations)*/\r
        if( pcbPtr != currPcbPtr ) {\r
+\r
                /* Add us to the ready list */\r
                if( currPcbPtr->state & ST_RUNNING ) {\r
+                       /** @req OS052 */\r
+                       POSTTASKHOOK();\r
                        Os_TaskRunningToReady(currPcbPtr);\r
                }\r
 \r
                /*\r
                 * Swap context\r
                 */\r
-               /** @req OS052 */\r
-               POSTTASKHOOK();\r
                assert(pcbPtr!=NULL);\r
 \r
                Os_ResourceReleaseInternal();\r
@@ -596,6 +598,7 @@ StatusType TerminateTask( void ) {
         */\r
        if( curr_pcb->activations <= 0 ) {\r
                curr_pcb->activations = 0;\r
+               POSTTASKHOOK();\r
                Os_TaskMakeSuspended(curr_pcb);\r
        } else {\r
                /* We need to add ourselves to the ready list again,\r
@@ -683,6 +686,7 @@ StatusType ChainTask( TaskType TaskId ) {
                --curr_pcb->activations;\r
                if( curr_pcb->activations <= 0 ) {\r
                        curr_pcb->activations = 0;\r
+                       POSTTASKHOOK();\r
                        Os_TaskMakeSuspended(curr_pcb);\r
                }\r
 \r