static void wakeUpFirst(signal_t *p_signal) { // wake up the first in the queue task_t *task = popTaskBack(&(p_signal->queue)); if(task != NULL) setTaskState(task, READY); }
void *readTask(FILE *inputFile){ Task *task = createTask(); TaskIdList *list = NULL; int endedTasks=-1, metaSize=-1, taskState=-1, id=-1; char *metadata = NULL; READ_BEGIN(inputFile); list = (TaskIdList *)readTaskIdList(inputFile); setTaskDependsOnMe(task, list); taskIdListDestroy(list); list = (TaskIdList *)readTaskIdList(inputFile); setTaskMyDeps(task, list); taskIdListDestroy(list); hashIntVoidDeserialize(inputFile, task->children); // make the children point to its mother HashIntVoidIterator *it = createHashIntVoidIterator(task->children, 0); PosHandlerIntVoid pos = hashIntVoidIteratorNext(it, task->children); while (pos != NULL) { Task *child = posGetValue(pos); child->mother = task; pos = hashIntVoidIteratorNext(it, task->children); } hashIntVoidIteratorDestroy(it, task->children); READ_NUM("id", id); setTaskId(task, id); READ_NUM("endedTasks", endedTasks); setTaskEndedTasks(task, endedTasks); READ_NUM("metaSize", metaSize); if (metaSize > 0) { metadata = malloc(metaSize); } else { metadata = NULL; } READ_BYTES(inputFile, metadata, metaSize); setTaskMetadata(task, metadata, metaSize); if(metadata != NULL){ free(metadata); } READ_NUM("taskState", taskState); setTaskState(task, taskState); DataSpace* dataSpace = createDataSpace(); readDataSpace(inputFile, dataSpace); setTaskDataSpace(task, dataSpace); READ_END return (void *)task; }
void waitSignal(signal_t *p_signal) { uint8_t irEnabled = enterAtomicBlock(); // insert task with highest priority on highest index insertTaskPriorityAsc(&(p_signal->queue), getRunningTask()); // change to blocking state and wait until wakeup setTaskState(getRunningTask(), BLOCKING); exitAtomicBlock(irEnabled); }
void enableLCDRefresher(void) { setTaskState(&lcdRefresherTask, RUNNING); }
void disableLCDRefresher(void) { setTaskState(&lcdRefresherTask, NOT_RUNNING); }