diff --git a/smi/src/smi.c b/smi/src/smi.c index 93155efd718ec94806fd3627659ad7fc661b65ec..fd53aaa4b6a5dad94f62e15c5ae94ad967f9be8c 100644 --- a/smi/src/smi.c +++ b/smi/src/smi.c @@ -498,6 +498,8 @@ printf("transition\n"); shm->taskStateSysVar[atomicStateVariables[i].taskStateVar].flags&=~(TASK_EXIT); // shm->taskStateSysVar[atomicStateVariables[i].taskStateVar].exclusive= // taskData[atomicStateVariables[i].taskID].exclusive; + shm->taskStateSysVar[atomicStateVariables[i].taskStateVar].oneShot= + taskData[atomicStateVariables[i].taskID].oneShot; shm->taskState[atomicStateVariables[i].taskStateVar].duration= taskData[atomicStateVariables[i].taskID].duration; // shm->taskStateSysVar[atomicStateVariables[i].taskStateVar].oneShot= diff --git a/smi/src/smi_def.h b/smi/src/smi_def.h index fb0b0a524527924200b6de3e3066e77b017a7aba..da9d5478236f051c652fdeb7214d7eb396a776c7 100644 --- a/smi/src/smi_def.h +++ b/smi/src/smi_def.h @@ -68,7 +68,7 @@ typedef volatile struct { taskIDType taskID; processType process; signed char nrt; -// signed char oneShot; // no longer required for NRT as dispatcher waits for SMI + signed char oneShot; unsigned char numberOfDataPorts; dataPathIDType dataPort[MAX_NUMBER_OF_DATA_PORTS_PER_STATE]; } taskStateSysVarStruct; diff --git a/smi/src/taskdisp_nrt.c b/smi/src/taskdisp_nrt.c index 64e41992264d52ffbee73ef20116dcf4b0d07f0f..c2f26db069af45cabd109d39108aa4865ad4d375 100644 --- a/smi/src/taskdisp_nrt.c +++ b/smi/src/taskdisp_nrt.c @@ -193,10 +193,10 @@ usleep(10000); n=shm->taskStateSysVar[i].process; if (n==nrtProcessID) { if ((shm->taskStateSysVar[i].flags&TASK_EXEC)!=0 -/* && ((shm->taskStateSysVar[i].oneShot==0 - || (shm->taskStateSysVar[i].flags&TASK_ACTIVE)==0 + && ((shm->taskStateSysVar[i].oneShot==0 + || (shm->taskStateSysVar[i].flags&TASK_EXIT)==0 ) - ) */ + ) ) { shm->taskStateSysVar[i].flags|=TASK_ACTIVE; shm->taskStateSysVar[i].flags&=~(TASK_BUSY);