Timer leggero.
Nella versione classica del timer, abbiamo creato una variabile separata a 4 byte per ogni timer. Molto dispendioso. Non è sempre necessario disporre di un timer per un periodo di diversi miliardi di millisecondi, il più delle volte è di pochi secondi. Puoi usare un tipo di dati più leggero (2 e 1 byte) e prendere solo la parte necessaria dal risultato millis(), più precisamente, il resto della divisione. Per accelerare l'esecuzione del codice, utilizzare una maschera di bit (bitmask - è un numero binario necessario per ottenere determinate cifre da un altro numero binario. Con l'aiuto di speciali operazioni logiche, il numero viene confrontato con la maschera e si ottiene il risultato: il valore di uno o più bit particolari, cioè una cifra).
Implementazione di un timer a 2 byte per una durata massima di 65535 ms (poco più di un minuto):
uint16_t timer1;
void loop()
{
uint16_t milliseconds = millis() & 0xFFFF;
if (milliseconds - timer1> 1000)
{
timer1
= milliseconds;
// azione
}
}
Allo stesso modo, puoi fare per una variabile da 1 byte, il periodo massimo è 255 ms:
uint8_t timer1;
void loop()
{
uint8_t milliseconds = millis() & 0xFF;
if (milliseconds - timer1 > 100)
{
timer1 = milliseconds;
// azione
}
}
