Pages: [1]   Go Down
Author Topic: Chiarimenti sulla leOS  (Read 253 times)
0 Members and 1 Guest are viewing this topic.
Ivrea
Offline Offline
God Member
*****
Karma: 5
Posts: 680
"La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché." Albert Einstein
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
#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?
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 327
Posts: 22640
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Ivrea
Offline Offline
God Member
*****
Karma: 5
Posts: 680
"La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché." Albert Einstein
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 327
Posts: 22640
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Pages: [1]   Go Up
Jump to: