scheduler : task.c\h - Owanesh/unifi-eos GitHub Wiki
task.h
typedef struct Task {
unsigned long id;
char name[9];
unsigned char priority;
unsigned char exec_cycles;
} Task;
task.c
typedef unsigned char byte;
unsigned long id = 1;
/* Restituisce 0 se i parametri non sono validi, altrimenti un numero !=0 */
int setTask(Task* t, char* name, byte priority, byte exec_cycles) {
int valid = (priority >= 0 && priority <= 9)
&& (exec_cycles >= 1 && exec_cycles <= 99);
if (valid) {
t->id = id++; //assegnazione e post-incremento
strcpy(t->name, name);
t->priority = priority;
t->exec_cycles = exec_cycles;
}
return valid;
}
La dichiarazione della struttura Task e la definizione delle funzioni utili ad interagire con essa sono presenti nel file task.h
, l’implementazione di tali operazioni sono presenti in task.c
.
Data la massima lunghezza di 8 caratteri, name viene dichiarato di 9 per contenere anche ‘\0
’ terminante.
Per ottimizzare lo spazio occupato, i campi priority
e exec_cycles
sono stati dichiarati come unsigned char, il tipo primitivo di variabile di grandezza minima sfruttabile (unsigned perché i valori accettabili sono esclusivamente positivi, rimangono comunque largamente sufficienti avendo un range [0,255] ).
Per leggibilità del codice unsigned char è stato rinominato byte.
Il campo id viene gestito come auto-incrementante ad ogni task creato attraverso setTask()
.