Go Down

Topic: Chiarimenti sulla leOS (Read 289 times) previous topic - next topic

Janos

Non mi tornano alcune cose della libreria leOS.
Ho provato ad eseguire questo codice:

Code: [Select]

#include <leOS.h>
leOS scheduler;

void print1() {
Serial.println("Prova1");
delay(1000);
Serial.println("Prova3");
}

void print2() {
Serial.println("Prova2");
}

void setup() {
Serial.begin(57600);
scheduler.begin();
scheduler.addTask(print1, 2000, SCHEDULED);
scheduler.addTask(print2, 2000, SCHEDULED_IMMEDIATESTART);
}

void loop() {
}


Il risultato è questo:

Quote
Prova2
Prova1
Prova3
Prova2
Prova1
Prova3
Prova2


Inoltre mi arrivano tutti insieme. Forse perché la delay non funziona più utilizzando la leOS?

leo72

In un lavoro schedulato con il leOS non puoi inserire delle funzioni basate sui timer perché la lib viene gestita tramite interrupt ed i job avviati sono chiamati all'interno di una ISR, per cui tutti gli altri interrupt vengono bloccati. Siccome la funzione delay si basa sul numero di millisecondi dall'avvio di Arduino e siccome questo contatore è incrementato da un timer, all'interno di una ISR il contatore dei millisecondi si "congela", e quindi la funzione di delay non... funziona.

Janos


... all'interno di una ISR il contatore dei millisecondi si "congela", e quindi la funzione di delay non... funziona.


Ehm, non ci avevo pensato... =)
Mi spieghi come vengono gestite le funzioni nel caso coincidano con lo stesso istante temporale? Ad esempio se do ad entrambe lo stesso intervallo o quando arriva un istante di tempo che è multiplo di entrambi (ad esempio se do a una una scansione ogni 100ms e l'altra ogni 150ms si incontreranno a 300ms)...

leo72

Se c'è coincidenza di tempi, i job vengono eseguiti secondo l'ordine con cui sono stati inseriti.

Go Up