/*FUNCTION**********************************************************************
 *
 * Function Name : OSA_TaskSetPriority
 * Description   : This function sets task's priority by task handler.
 *
 *END**************************************************************************/
osa_status_t OSA_TaskSetPriority(task_handler_t handler, uint16_t priority)
{
    if (OS_ERR_NONE == OSTaskChangePrio(handler->OSTCBPrio, PRIORITY_OSA_TO_RTOS(priority)))
    {
        return kStatus_OSA_Success;
    }
    else
    {
        return kStatus_OSA_Error;
    }
}
/*FUNCTION**********************************************************************
 *
 * Function Name : OSA_TaskCreate
 * Description   : This function is used to create a task and make it ready.
 * Return kStatus_OSA_Success if register successfully, otherwise return
 * kStatus_OSA_Error.
 *
 *END**************************************************************************/
osa_status_t OSA_TaskCreate(task_t          task,
                         uint8_t        *name,
                         uint16_t        stackSize,
                         task_stack_t   *stackMem,
                         uint16_t        priority,
                         task_param_t    param,
                         bool            usesFloat,
                         task_handler_t *handler)
{
    INT8U err;

#if OS_CRITICAL_METHOD == 3U
    OS_CPU_SR   cpu_sr = 0U;
#endif

    uint32_t stackSizeLocal = stackSize/sizeof(task_stack_t);
    /*
     * To provide unified task piority for upper layer, OSA layer makes conversion.
     * uC/OS-II's highest 4 priorities are reserved for system, so add 4 here.
     */
    INT8U localPriority = PRIORITY_OSA_TO_RTOS(priority);

    err = OSTaskCreateExt(task,            /* Task pointer*/
                          param,           /* Task input parameter*/
                          &stackMem[stackSizeLocal - 1],   /* Pointer to top of stack*/
                          localPriority,   /* Task priority*/
                          localPriority,   /* Task id. should be the same as priority*/
                          stackMem,        /* Pointer to the bottom of the stack*/
                          stackSizeLocal,  /* Size of the stack*/
                          (void*)0,   /* TCB extension not supported by this abstraction*/
                          usesFloat ? OS_TASK_OPT_SAVE_FP : OS_TASK_OPT_NONE
                          );
    if (OS_ERR_NONE != err)
    {
        return kStatus_OSA_Error;
    }
#if OS_TASK_NAME_EN > 0u
    OSTaskNameSet(localPriority, name, &err);
    if (OS_ERR_NONE != err)
    {
        return kStatus_OSA_Error;
    }
#else
    name = name;
#endif
    OS_ENTER_CRITICAL();
    *handler = OSTCBPrioTbl[localPriority];
    OS_EXIT_CRITICAL();
    return kStatus_OSA_Success;
}
/*FUNCTION**********************************************************************
 *
 * Function Name : OSA_TaskSetPriority
 * Description   : This function sets task's priority by task handler.
 *
 *END**************************************************************************/
osa_status_t OSA_TaskSetPriority(task_handler_t handler, uint16_t priority)
{
    OS_ERR err;

    OSTaskChangePrio(handler, PRIORITY_OSA_TO_RTOS(priority), &err);

    if (OS_ERR_NONE == err)
    {
        return kStatus_OSA_Success;
    }
    else
    {
        return kStatus_OSA_Error;
    }
}
Beispiel #4
0
/*FUNCTION**********************************************************************
*
* Function Name : OSA_TaskCreate
* Description   : This function is used to create a task and make it ready.
* Param[in]     :  threadDef  - Definition of the thread.
*                  task_param - Parameter to pass to the new thread.
* Return Thread handle of the new thread, or NULL if failed.
*
*END**************************************************************************/
osaTaskId_t OSA_TaskCreate(osaThreadDef_t *thread_def,osaTaskParam_t task_param)
{
  osaTaskId_t taskId = NULL;
  task_handler_t task_handler;
  
  if (xTaskCreate(
                  (task_t)thread_def->pthread,  /* pointer to the task */
                  (char const*)thread_def->tname, /* task name for kernel awareness debugging */
                  thread_def->stacksize/sizeof(portSTACK_TYPE), /* task stack size */
                  (task_param_t)task_param, /* optional task startup argument */
                  PRIORITY_OSA_TO_RTOS(thread_def->tpriority),  /* initial priority */
                  &task_handler /* optional task handle to create */
                    ) == pdPASS)
  {
    taskId = (osaTaskId_t)task_handler;
  }
  return taskId;
}
/*FUNCTION**********************************************************************
 *
 * Function Name : OSA_TaskCreate
 * Description   : This function is used to create a task and make it ready.
 * Return kStatus_OSA_Success if register successfully, otherwise return
 * kStatus_OSA_Error.
 *
 *END**************************************************************************/
osa_status_t OSA_TaskCreate(task_t          task,
                         uint8_t        *name,
                         uint16_t        stackSize,
                         task_stack_t   *stackMem,
                         uint16_t        priority,
                         task_param_t    param,
                         bool            usesFloat,
                         task_handler_t *handler)
{
    if (xTaskCreate(
            task,  /* pointer to the task */
            (char const*)name, /* task name for kernel awareness debugging */
            stackSize/sizeof(portSTACK_TYPE), /* task stack size */
            param, /* optional task startup argument */
            PRIORITY_OSA_TO_RTOS(priority),  /* initial priority */
            handler /* optional task handle to create */
        ) != pdPASS)
    {
        return kStatus_OSA_Error; /* error! probably out of memory */
    }
    return kStatus_OSA_Success;
}
/*FUNCTION**********************************************************************
 *
 * Function Name : OSA_TaskCreate
 * Description   : This function is used to create a task and make it ready.
 * Return kStatus_OSA_Success if register successfully, otherwise return
 * kStatus_OSA_Error.
 *
 *END**************************************************************************/
osa_status_t OSA_TaskCreate(task_t          task,
                         uint8_t        *name,
                         uint16_t        stackSize,
                         task_stack_t   *stackMem,
                         uint16_t        priority,
                         task_param_t    param,
                         bool            usesFloat,
                         task_handler_t *handler)
{
    OS_ERR err;
    uint32_t stackSizeLocal = stackSize/sizeof(task_stack_t);

    OS_PRIO localPriority = PRIORITY_OSA_TO_RTOS(priority);

    OSTaskCreate(*handler,          /* Task handler.                               */
                 (CPU_CHAR*)name,   /* Task name.                                  */
                 task,              /* Task pointer.                               */
                 param,             /* Task parameter.                             */
                 localPriority,     /* Task priority.                              */
                 stackMem,          /* Stack's base.                               */
                 0,                 /* Stack limit.                                */
                 stackSizeLocal,    /* Stack size.                                 */
                 0,                 /* Number of messages can be sent to the task. */
                 0,                 /* Default time_quanta.                        */
                 0,                 /* TCB extension, not used.                    */
                 usesFloat ? OS_OPT_TASK_SAVE_FP : 0,
                 &err
                 );
    if (OS_ERR_NONE == err)
    {
        return kStatus_OSA_Success;
    }
    else
    {
        return kStatus_OSA_Error;
    }
}
/*FUNCTION**********************************************************************
 *
 * Function Name : OSA_TaskSetPriority
 * Description   : This function sets task's priority by task handler.
 *
 *END**************************************************************************/
osa_status_t OSA_TaskSetPriority(task_handler_t handler, uint16_t priority)
{
    vTaskPrioritySet(handler, PRIORITY_OSA_TO_RTOS(priority));
    return kStatus_OSA_Success;
}
Beispiel #8
0
/*FUNCTION**********************************************************************
 *
 * Function Name : OSA_TaskSetPriority
 * Description   : This function sets task's priority by task handler.
 *
 *END**************************************************************************/
osaStatus_t OSA_TaskSetPriority(osaTaskId_t taskId, osaTaskPriority_t taskPriority)
{
    vTaskPrioritySet((task_handler_t)taskId, PRIORITY_OSA_TO_RTOS(taskPriority));
    return osaStatus_Success;
}
Beispiel #9
0
extern uint8_t mqx_interrupt_stack[];
#endif


#define TASK_TEMPLATE_LIST_END         {0, 0, 0, 0, 0, 0, 0}
  
  
/* MQX task template list */
const TASK_TEMPLATE_STRUCT MQX_template_list[] =
{
  /* Task: MainTask */
  {
    /* Task number                    */  MAINTASK_TASK,
    /* Entry point                    */  (TASK_FPTR)main_task,
    /* Stack size                     */  MAINTASK_TASK_STACK_SIZE,
    /* Task priority                  */  (PRIORITY_OSA_TO_RTOS(MAINTASK_TASK_PRIORITY)),
    /* Task name                      */  MAINTASK_TASK_NAME,
    /* Task attributes                */  (MQX_AUTO_START_TASK),
    /* Task parameter                 */  (uint32_t)(NULL),
    /* Task time slice                */  (uint32_t)(0U)
  },       
  /* Task: ddScheduler */
  {
    /* Task number                    */  DDSCHEDULER_TASK,
    /* Entry point                    */  (TASK_FPTR)runScheduler,
    /* Stack size                     */  DDSCHEDULER_TASK_STACK_SIZE,
    /* Task priority                  */  (PRIORITY_OSA_TO_RTOS(DDSCHEDULER_TASK_PRIORITY)),
    /* Task name                      */  DDSCHEDULER_TASK_NAME,
    /* Task attributes                */  (0),
    /* Task parameter                 */  (uint32_t)(NULL),
    /* Task time slice                */  (uint32_t)(0U)