Untitled
/* * scheduler.c * * Created on: Dec 7, 2022 * Author: MihaiDaraban */ #include "scheduler.h" tCB initTask(void (*funct)(), uint8_t taskPeriod, uint8_t taskDelay, bool periodicTask) { tCB task; task.funct = funct; task.taskPeriod = taskPeriod; task.taskDelay = taskDelay; task.elapsedTime = 0; // initializare timp scurs de la ultima rulare task.periodicTask = periodicTask; task.state = Waiting; if (taskDelay == 0) { task.state = Ready; } return (task); } // initTask() void scheduler() { uint8_t indexTask; for(indexTask = 0; indexTask < TASK_COUNT; ++indexTask) { ++taskList[indexTask].elapsedTime; /* incrementam cu un MinorCycle */ if( (taskList[indexTask].state == Ready) && (taskList[indexTask].elapsedTime >= taskList[indexTask].taskPeriod) ) { taskList[indexTask].state = Running; /* lansare task */ taskList[indexTask].funct(); /* am revenit din rularea task-ului */ if (taskList[indexTask].periodicTask == false) { taskList[indexTask].state = Stop; /* Stergem task-ul */ } else { taskList[indexTask].state = Ready; taskList[indexTask].elapsedTime = 0; } } else // Implementare delay Task { if( (taskList[indexTask].state == Waiting) && (taskList[indexTask].elapsedTime >= taskList[indexTask].taskDelay) ) { taskList[indexTask].state = Ready; taskList[indexTask].taskDelay = 0; taskList[indexTask].elapsedTime = 0; } } } } // scheduler()
Leave a Comment