Bonjour
Sur un ESP j'essaie de faire tourner un programme qui calcule la durée des créneaux de commande d'un pont pour générer une onde sinus. Il se compose d'un générateur d'onde triangulaire comparé à la valeur du sinus de l'oméga correspondant.
Mon pb c'est que le programme plante après 5000 step alors qui doit en faire 10000.
#include <stdio.h> #include <math.h>
int i = 0;
int pas = 25;
double omega; /**/
double incPi;
double sinus;
int rampe= 1; /progression acceleration/
int tableau[150];
int z = 0; /index tableau/
void setup() {
Serial.begin(115200);
/**/
omega = 3.14159; /1/2 alternance en radian/
incPi = (omega/pas)/400; /pas en radian/
unsigned long time;*
_ int steep = 1; /pas de la boucle/_
_ int index; /index de select case/_
_ /time = micros();/_
_ double dentdescie = 0; /valeur de la dent de scie de (0 à 1) x rampe/_
_ int y =0; /nbre d'incréments depuis To/_
_ int memoire = 1; /**/_
{Serial.println("tableau->");Serial.print(tableau*);};[/quote]* Excusez j'ai eu un pb de recopie. Z ne s'incrémente que jusqu'à 4 puis arrêt, je n'afficherai le tableau que si ça tourne en fin de boucle. merci
Le programme passe peut-être trop de temps dans le do...while() de calculTempsConduction().
Il faudrait peut-être ajouter un yield() dans la boucle pour rendre la main à l'OS de temps en temps.
J'ai bien charger la bibliothèque (Scheduler.h) mais elle n'est pas prise en compte et j'ai du coups une erreur de compil, elle est bien dans le dossier librairies. Après redémarrage système tjrs erreur.
j'en ai conclu que c'était un pb de librairie. en cherchant j'ai trouvé qu'elle dépendait de (Scheduler.h) donc je l'ai chargée mais elle n'est pas prise en compte dans le prg.
connais pas ce yeld (??) qui serait lié à scheduler() ....
mais par contre yield() avec un i après le y , est une fonction du noyau ESP8266 pour Arduino : https://arduino-esp8266.readthedocs.io/en/latest/reference.html Il s'agit bien de la fonction recommandée par fdufnews au message #3
pas besoin d'aller chercher midi à quatorze heures , elle est disponible dès qu'on met en place l'extension ESP8266 pour Arduino.
yakafautcon:
en compilant avec yield()
'yeld' was not declared in this scope
j'en ai conclu que c'était un pb de librairie. en cherchant j'ai trouvé qu'elle dépendait de (Scheduler.h) donc je l'ai chargée mais elle n'est pas prise en compte dans le prg.
Je n'avais pas vu la faute de typo.
yield() existe aussi dans la librairie Arduino.
Cette fonction est appelée par delay() et permet de rendre la main pendant un appel à delay().
Dans la demande initiale un ESP est utilisé.
ESP32 ou ESP8266 ? ? ?
Il existe plusieurs librairies Scheduler.
Encore faut-il que la librairie Scheduler choisie soit compatible ESP8266.
Le programme passe peut-être trop de temps dans le do...while() de calculTempsConduction().
Il faudrait peut-être ajouter un yield() dans la boucle pour rendre la main à l'OS de temps en temps.
Donc c'est pour cela suivant ton conseil que j'ai rajouté ce délais.
le programme boucle 2532 fois puis redémarre systématiquement.
Le programme passe peut-être trop de temps dans le do...while() de calculTempsConduction().
Il faudrait peut-être ajouter un yield() dans la boucle pour rendre la main à l'OS de temps en temps.
Non, ta variable z est incrémentée sans contrôle de débordement alors qu'elle sert d'index dans un tableau de 150 octets, dans une boucle while(y<10000);
Le fond du problème est là
Sauf erreur de lecture de ma part bien sûr.
Je suis d'accord mais ne sachant pas combien de valeurs je vais récupérer le tableau est largement dimensionné et après 2532 pas l'index n'est qu'à 14 alors que le tableau est dimensionné à 150.
En théorie en découpant l'alternance en 25 segments au pire le tableau aura 75 valeurs.
Je vais essayer de refaire le prg et boucler par segments.
Nota je suis un novice en C++ et vu mon âge c'est surtout pour me distraire.