Bonjour,
En essayant de faire du multitâche sur ma DUE je suis tombé sur le "Scheduler" mais comme pour les autres bibliothèques ça réduit les performances. SAUF que si je l'utilise en monotâche il est plus performant que la simple procédure loop() !
loop(): 244ms
Scheduler : 70 ms
Qu'est ce qui explique ce grand écart?
Voici les minis programmes:
Loop() classique:
#include <LiquidCrystal.h>
#include <Wire.h>
#include <stdio.h>
#include <stdlib.h>
int i;
String WTmp;
String WTmp2;
int nT1;
int nT2;
LiquidCrystal lcd(7, 8, 9, 10, 11,12);
String Mess= "Test N°";
int k;
void setup() {
// put your setup code here, to run once:
lcd.begin(16,2);
Serial.begin(9600);
k = 0;
}
void loop() {
// put your main code here, to run repeatedly:
i++;
if (i>100000) {
k++;
nT2 = nT1;
nT1 = millis();
int nRes;
nRes = nT1 - nT2;
i =0;
lcd.setCursor ( 0, 1 );
WTmp = String(nRes);
WTmp2 = String(k);
lcd.print(Mess+ WTmp2 +" "+ WTmp);
Serial.println(Mess+ WTmp2 +" "+ WTmp);
}
}
En utilisant Scheduler :
include <Scheduler.h>
#include <LiquidCrystal.h>
#include <Wire.h>
#include <stdio.h>
#include <stdlib.h>
int i;
String WTmp;
String WTmp2;
int nT1;
int nT2;
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
String Mess = "Test N°";
int k;
void setup() {
// put your setup code here, to run once:
lcd.begin(16, 2);
Serial.begin(9600);
k = 0;
// put your setup code here, to run once:
Scheduler.startLoop(loop3);
}
void loop() {
yield();
}
void loop3() {
i++;
if (i > 100000) {
k++;
nT2 = nT1;
nT1 = millis();
int nRes;
nRes = nT1 - nT2;
i = 0;
lcd.setCursor(0, 1);
WTmp = String(nRes);
WTmp2 = String(k);
lcd.print(Mess + WTmp2 + " " + WTmp);
}
}
PS: si vous connaissez une bibliothèque qui ne réduit pas trop les performances ça m'intéresse aussi ![]()