Ejemplo n.º 1
0
TIMM_OSAL_ERRORTYPE TIMM_OSAL_DeleteTask (TIMM_OSAL_PTR pTask)
{
    TIMM_OSAL_ERRORTYPE bReturnStatus = TIMM_OSAL_ERR_NONE;
    TIMM_OSAL_TASK *pHandle = (TIMM_OSAL_TASK *)pTask;
    TIMM_OSAL_U32 uSleepTime = TASK_MIN_WAIT_TIME;

    if (TIMM_OSAL_NULL == pHandle) 
	{
		bReturnStatus = TIMM_OSAL_ERR_PARAMETER;
        goto EXIT;
    }

    if (pHandle->isCreated != TIMM_OSAL_TRUE) 
	{
		bReturnStatus = TIMM_OSAL_ERR_UNKNOWN;
        goto EXIT;
    }
    /*Check the status of the Task*/
    while ( Task_Mode_TERMINATED != Task_getMode ( pHandle->task) ) {
      TIMM_OSAL_SleepTask ( uSleepTime );
      uSleepTime <<= 1;
      if ( uSleepTime >= TASK_MAX_WAIT_TIME) {
        bReturnStatus = TIMM_OSAL_ERR_UNKNOWN;
        goto EXIT;
      }
    }
    Task_delete ( &(pHandle->task) );

    TIMM_OSAL_Free (pHandle->stackPtr);
    TIMM_OSAL_Free (pHandle);
EXIT:
    return bReturnStatus;
}
Ejemplo n.º 2
0
TIMM_OSAL_ERRORTYPE TIMM_OSAL_Task_newpri ( TIMM_OSAL_PTR pTask, 
                                            TIMM_OSAL_S32 sNewPriority )
{
  TIMM_OSAL_ERRORTYPE bReturnStatus = TIMM_OSAL_ERR_NONE;
  TIMM_OSAL_TASK *pHandle = (TIMM_OSAL_TASK *)pTask;

  if ( ( TIMM_OSAL_NULL == pHandle ) || ( 0 == sNewPriority ) || 
       ( sNewPriority >= Task_numPriorities ) ) 
  {
      bReturnStatus = TIMM_OSAL_ERR_PARAMETER;
      goto EXIT;
  }

  if (pHandle->isCreated != TIMM_OSAL_TRUE) 
 {
      bReturnStatus = TIMM_OSAL_ERR_UNKNOWN;
      goto EXIT;
  }

  if ( Task_Mode_TERMINATED == Task_getMode ( pHandle->task) )
  {
		bReturnStatus = TIMM_OSAL_ERR_UNKNOWN;
        goto EXIT;
    }

  Task_setPri ( pHandle->task, (Int) sNewPriority );

EXIT:
  return bReturnStatus;
}
Ejemplo n.º 3
0
Int32 Utils_tskDelete(Utils_TskHndl * pHndl)
{
    UInt32 sleepTime = 8;                                  /* in OS ticks */

    Utils_tskSendCmd(pHndl, UTILS_TSK_CMD_EXIT);

    /* wait for command to be received and task to be exited */

    Task_sleep(1);

    while (Task_Mode_TERMINATED != Task_getMode(pHndl->tsk))
    {

        Task_sleep(sleepTime);

        sleepTime >>= 1;

        if (sleepTime == 0)
        {
            char name[64];

            strcpy(name, "INVALID_TSK");
            Utils_prfGetTaskName(pHndl->tsk, name);
            Vps_printf("Task Delete Error!!!!!!, task %s not deleted\n", name);
            UTILS_assert(0);
        }
    }

    Utils_prfLoadUnRegister(pHndl->tsk);

    Task_delete(&pHndl->tsk);
    Utils_mbxDelete(&pHndl->mbx);

    return FVID2_SOK;
}
Ejemplo n.º 4
0
/*
 *  ======== Task_stat ========
 */
Void Task_stat(Task_Object *tsk, Task_Stat *statbuf)
{
    statbuf->priority = tsk->priority;
    statbuf->stack = tsk->stack;
    statbuf->stackSize = tsk->stackSize;
    statbuf->stackHeap = tsk->stackHeap;
    statbuf->env = tsk->env;
    statbuf->mode = Task_getMode(tsk);
    statbuf->sp = tsk->context;

    statbuf->used = Task_SupportProxy_stackUsed((Char *)tsk->stack,
        tsk->stackSize);
}
Ejemplo n.º 5
0
Int32 Utils_tskSetPri(Utils_TskHndl * pHndl, UInt32 newPri)
{

    if((Task_Mode_TERMINATED != Task_getMode(pHndl->tsk)) && (newPri != 0) && (newPri < (UInt32)Task_numPriorities))
    {
       Task_setPri(pHndl->tsk, newPri);
       pHndl->tskPri = newPri;
    }
    else
       return FVID2_EFAIL;
    
    return FVID2_SOK;
}
Ejemplo n.º 6
0
void join_thread(THREAD_TYPE thread)
{
#if defined(_POSIX_THREADS) && !defined(__MINGW32__)
    pthread_join(thread, 0);
#elif defined(WOLFSSL_TIRTOS)
    while(1) {
        if (Task_getMode(thread) == Task_Mode_TERMINATED) {
		    Task_sleep(5);
            break;
        }
        Task_yield();
    }
#else
    int res = WaitForSingleObject((HANDLE)thread, INFINITE);
    assert(res == WAIT_OBJECT_0);
    res = CloseHandle((HANDLE)thread);
    assert(res);
#endif
}
Ejemplo n.º 7
0
/*
 *  ======== Task_Instance_finalize ========
 */
Void Task_Instance_finalize(Task_Object *tsk, Int status)
{
#ifndef ti_sysbios_knl_Task_DISABLE_ALL_HOOKS
    Int i, cnt;
#endif
    UInt taskKey, hwiKey;

    /*
     * Task's can only be deleted from main and task threads.
     * Running Tasks can not be deleted.
     */
    if (status == 0) {
        taskKey = Task_disable();

        /*
         * Bar users from calling Task_delete() on terminated tasks
         * if deleteTerminatedTasks is enabled.
         */
        if ((Task_deleteTerminatedTasks == TRUE)
             && (Task_getMode(tsk) == Task_Mode_TERMINATED)
             && (tsk->readyQ == Task_Module_State_terminatedQ())) {
            Error_raise(NULL, Task_E_deleteNotAllowed, tsk, 0);
        }

        Assert_isTrue((Task_getMode(tsk) != Task_Mode_RUNNING),
                        Task_A_badTaskState);

        Assert_isTrue((BIOS_getThreadType() == BIOS_ThreadType_Main) ||
                      (BIOS_getThreadType() == BIOS_ThreadType_Task),
                        Task_A_badThreadType);

        hwiKey = Hwi_disable();

        if (tsk->mode == Task_Mode_READY) {
            /* remove task from its ready list */
            Queue_remove((Queue_Elem *)tsk);
            /* if last task in readyQ, remove corresponding bit in curSet */
            if (Queue_empty(tsk->readyQ)) {
                Task_module->curSet &= ~tsk->mask;
            }
            
            /* 
             * if task was made ready by a pend timeout but hasn't run yet
             * then its clock object is still on the Clock service Q.
             */
            if (tsk->pendElem != NULL) {
                if (BIOS_clockEnabled && tsk->pendElem->clock) {
                    Clock_removeI(tsk->pendElem->clock);
                }
            }
        }

        if (tsk->mode == Task_Mode_BLOCKED) {
            Assert_isTrue(tsk->pendElem != NULL, Task_A_noPendElem);

            /* Seemingly redundant test in case Asserts are disabled */
            if (tsk->pendElem != NULL) {
                Queue_remove(&(tsk->pendElem->qElem));
                if (BIOS_clockEnabled && tsk->pendElem->clock) {
                    Clock_removeI(tsk->pendElem->clock);
                }
            }
        }

        if (tsk->mode == Task_Mode_TERMINATED) {
            /* remove task from terminated task list */
            Queue_remove((Queue_Elem *)tsk);
        }
        else {
            Task_processVitalTaskFlag(tsk);
        }

        Hwi_restore(hwiKey);

        Task_restore(taskKey);
    }

    /* return if failed before allocating stack */
    if (status == 1) {
        return;
    }

    if (BIOS_runtimeCreatesEnabled) {
        /* free stack if it was allocated dynamically */
        if (tsk->stackHeap != (xdc_runtime_IHeap_Handle)(-1)) {
            Memory_free(tsk->stackHeap, tsk->stack, tsk->stackSize);
        }
    }

    /* return if failed to allocate Hook Env */
    if (status == 2) {
        return;
    }

    /* status == 0 or status == 3 - in both cases create hook was called */

#ifndef ti_sysbios_knl_Task_DISABLE_ALL_HOOKS
    /* free any allocated Hook Envs */
    if (Task_hooks.length > 0) {
        if (status == 0) {
            cnt = Task_hooks.length;
        }
        else {
            cnt = status - 3;   /* # successful createFxn() calls */
        }

        /*
         * only call deleteFxn() if createFxn() was successful
         */
        for (i = 0; i < cnt; i++) {
            if (Task_hooks.elem[i].deleteFxn != NULL) {
                Task_hooks.elem[i].deleteFxn(tsk);
            }
        }

        Memory_free(Task_Object_heap(), tsk->hookEnv,
                Task_hooks.length * sizeof (Ptr));
    }
#endif
}