diciamo di avere un task da schedulare ogni x microsecondi. e diciamo che purtroppo il nostri timer non si incrementa di microsecondo in microsecondo, ma magari di 4 in 4 (come la micros() di arduino!).
certo, e poi bisogna anche consderare che magari le variabili di tempo di esecuzione vanno in overflow... quanti if, quante condizioni, quanti... o no? o forse possiamo aggirare gli overflow, e non solo, ma anche eseguire quei task che cadono dall'ultima esecuzione?
ecco la mia soluzione, un piccolo esercizio di stile, apparentemente semplice, ma che nasconde uno sforzo per essere compreso a fondo, specialmente nei casi limite
#include <stdio.h>
#include <stdint.h>
int main(int argv, char *args[]){
uint8_t tempo_attuale = 0;
uint8_t tempo_ultima_esecuzione = -1;//force overflow, or if first execution is at 0 it get screwed up
uint8_t periodo_in_esame;
/*le seguenti 3 variabili possono essere messe in una strutture a poi "arrayzzate" per avere più eventi indipendenti*/
uint8_t tempo_esecuzione = 0;
uint8_t tempo_passato;
uint8_t periodo = 10;
/* more difficult! il timer è irregolare */
uint8_t ganularita_timer = 3;
for (uint16_t b = 0; b < 200; b++){
tempo_passato = tempo_attuale-tempo_esecuzione;
periodo_in_esame = tempo_attuale-tempo_ultima_esecuzione;
printf("\nt1=%d, t=%d,tempo_passato=%d", tempo_esecuzione, tempo_attuale,tempo_passato);
if (tempo_passato <= periodo_in_esame){
tempo_esecuzione += periodo;
printf(" ESECUZIONE!");
}
tempo_ultima_esecuzione = tempo_attuale;
tempo_attuale+=ganularita_timer;
}
return 0;
}