int AddTask(void (*p_Task)(void),unsigned char TaskPriority)
{
  unsigned char TaskPriorityTmp;
  if (TaskArray[TaskPriority]==0)
  {
    TaskArray[TaskPriority]=p_Task;
    CurrentPriority=(CurrentPriority>TaskPriority)?TaskPriority:CurrentPriority;
  }
  else
    return -1;
  
  if (firstaddtask==0)
  {
    ListHead=(struct TaskTimeList *)malloc(sizeof(struct TaskTimeList));
    ListHead->next=0;
    ListHead->tasknode=(struct TaskPrioNode *)malloc(sizeof(struct TaskPrioNode));
    ListHead->tasknode->next=0;
    
    ListHead->Time=0;
    ListHead->tasknode->Priority=TaskPriority;
    firstaddtask=-1;
  }
  else
  {
    TaskPriorityTmp=CurrentPriority;
    CurrentPriority=TaskPriority;
    TaskDelay(0);
    CurrentPriority=TaskPriorityTmp;
  }
  return 0;
}
Esempio n. 2
0
void __task demo_task(void * data)
{
    int i;

    i = (int)data;

    for(;;){
        lock_kernel();
        printf("Task Data: %d\n", i);
        unlock_kernel();
        TaskDelay(100*i);
    }
}
Esempio n. 3
0
// Each child class has to be added to the switch in this function (clumsy..)
Task* Task::createFromStr(const string params, bool rand)
{
    vector<string> exploded;
    Task *result;

    split(params, ITEM_SEPARATOR[0], exploded);

    switch (exploded[0][0])
    {
    case TASK_WIN_AGAINST:
        result = NEW TaskWinAgainst();
        break;
    case TASK_SLAUGHTER:
        result = NEW TaskSlaughter();
        break;
    case TASK_DELAY:
        result = NEW TaskDelay();
        break;
    case TASK_IMMORTAL:
        result = NEW TaskImmortal();
        break;
    case TASK_MASSIVE_BURIAL:
        result = NEW TaskMassiveBurial();
        break;
    case TASK_WISDOM:
        result = NEW TaskWisdom();
        break;
    case TASK_PACIFISM:
        result = NEW TaskPacifism();
        break;
    default:
#if defined (WIN32) || defined (LINUX)
        DebugTrace("\nTasks.cpp::createFromStr: Undefined class type\n");
#endif
        result = NEW TaskWinAgainst();
    }

    if (!result)
    {
#if defined (WIN32) || defined (LINUX)
        DebugTrace("\nTask::createFromStr: Failed to create task\n");
#endif
        return NULL;
    }

    result->persistentAttribs = exploded;

    if (exploded.size() >= COMMON_ATTRIBS_COUNT)
    {
        result->restoreCommonAttribs();
        if (exploded.size() > COMMON_ATTRIBS_COUNT)
        {
            result->restoreCustomAttribs();
        }
    }
    else if (rand)
    {
        result->randomize();
    }

    return result;
}