Untitled
unknown
plain_text
a year ago
1.8 kB
10
Indexable
/*
* 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()
Editor is loading...
Leave a Comment