17-10-2024, 03:35 PM
(Modification du message : 19-10-2024, 04:37 PM par Youpimatin.)
Je suis en UxI en v12.03
Il y a un tout petit bug sur les mesures U et I toutes les 1 heure 11 minutes et 35 secondes (soit 4295 secondes, soit 2^32 µs)
Rien de très important ni d'urgent, cela peut juste déclencher de façon très brève les actions sans raison, ça a eu cet effet chez moi ce matin
(Et l'échelle du graph sur Home Assistant est plus grande que nécessaire.)
Désolé pour les petits bugs trouvés, André, je vais essayer de chercher de mon côté s'il est possible de mitiger ou d'éviter ça dans le code simplement.
Une piste (peut-être complètement fausse) :
-> La valeur retournée par la fonction micros() déborde toutes les 2^32µs
-> Concernant la ligne iStore = (micros() % 20000) / 200; : 2^32 a un reste quand on le divise par 20000, du coup je suppose que des échantillons sont stockés dans le tableau à des index erronés pendant 1 appel (ou 2?) de MeasurePower()
Micros() = 4294967295 implique que iStore = 36
Micros() = 0 implique que iStore = 0
et on ne va pas jusqu'au bout du tableau ?
A l'occasion, j'essayerai de compiler une version avec des tableaux de 128 mesures, voir si ça passe niveau timing sur le core0 (128*150µs = 19.2ms, presque pas d'aliasing)
Il y a un tout petit bug sur les mesures U et I toutes les 1 heure 11 minutes et 35 secondes (soit 4295 secondes, soit 2^32 µs)
Rien de très important ni d'urgent, cela peut juste déclencher de façon très brève les actions sans raison, ça a eu cet effet chez moi ce matin
(Et l'échelle du graph sur Home Assistant est plus grande que nécessaire.)
Désolé pour les petits bugs trouvés, André, je vais essayer de chercher de mon côté s'il est possible de mitiger ou d'éviter ça dans le code simplement.
Une piste (peut-être complètement fausse) :
-> La valeur retournée par la fonction micros() déborde toutes les 2^32µs
-> Concernant la ligne iStore = (micros() % 20000) / 200; : 2^32 a un reste quand on le divise par 20000, du coup je suppose que des échantillons sont stockés dans le tableau à des index erronés pendant 1 appel (ou 2?) de MeasurePower()
Micros() = 4294967295 implique que iStore = 36
Micros() = 0 implique que iStore = 0
et on ne va pas jusqu'au bout du tableau ?
A l'occasion, j'essayerai de compiler une version avec des tableaux de 128 mesures, voir si ça passe niveau timing sur le core0 (128*150µs = 19.2ms, presque pas d'aliasing)