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().