Arduino n'est pas un langage, c'est le C++

Salut J-M-L

Tu pensait vraiment que j'allais mettre en ligne un programme qui avait un tel bug?
Tout ce que je mets en ligne est testé en "vrai"
La lecture en "diagonale " n'a pas que du bon même faite par un expert.

Cordialement
jpbbricole

:man_shrugging:

Je n'ai jamais dit que vous n'aviez pas testé... Je ne vois pas pourquoi ça vous choque que l'on fasse des commentaires ? La relecture de code est une technique très employée pour justement détecter des soucis.

ça a permis d'identifier le 00 qui peut induire un débutant en erreur, la variable timer qui ne sert à rien (et potentiellement qui n'aurait pas le bon type), une approximation dans la syntaxe de déclaration de l'initialisation du tableau qui peut déclencher des warning à la compilation suivant les plateformes et de clarifier que j'avais tort sur la fonction, ce qui est bien aussi :).. ça sert à ça une discussion et un forum...

De plus le test ponctuel ne montre pas forcément tous les bugs, donc ça arrive. (par exemple le manque du break dans votre code d'écoute des commandes du port série mentionné il y a 2 ans, vous l'avez toujours dans les post que vous mettez, ou l'usage abusif des concaténation de String qui a la longue peuvent faire planter le code...)

Salut J-M-L

C'est expliqué ici.

Cordialement
jpbbricole

Oui, la fonction existe mais on vous l'a déjà expliqué il me semble...

Ce genre de concaténation crée des String intermédiaires (il faut de la mémoire pour stocker la concaténation) ce qui morcelle la mémoire (le tas). De plus la concaténation n'est potentiellement pas réalisée si la mémoire est basse (moins de 128 octets des SRAM dispo sur AVR), et donc cela peut conduire à un comportement potentiellement erratique qui peut survenir des jours plus tard ➜ ce n'est pas visible lors d'un test de 15 minutes.

La solution simple au lieu de donner de mauvaises habitudes aux nouveaux serait de proposer à la place de

void journalListeOne(int journalIndex)
{
	Serial.print(mesuresJournal[journalIndexListe[journalIndex]].now.timestamp(2) +"/");
	Serial.print(mesuresJournal[journalIndexListe[journalIndex]].now.timestamp(1) +"\t p:");
	Serial.println(mesuresJournal[journalIndexListe[journalIndex]].pression);
}

plutôt ce code

void journalListeOne(int journalIndex)
{
  Serial.print(mesuresJournal[journalIndexListe[journalIndex]].now.timestamp(DateTime::TIMESTAMP_DATE));
  Serial.write('/');
  Serial.print(mesuresJournal[journalIndexListe[journalIndex]].now.timestamp(DateTime::TIMESTAMP_TIME));
  Serial.print(F("\t p:"));
  Serial.println(mesuresJournal[journalIndexListe[journalIndex]].pression);
}

C'est plus efficace à tout point de vue et il n'y a pas de String créées qui risquent de planter plus tard.

idem pour le passage de string en paramètre à une fonction sans passer la référence etc...

Comme vous vous débrouillez bien en programmation, que vous comprenez ce qu'il se passe, et que vous proposez de nombreux exemples à des débutants, ce serait cool si ces exemples encourageaient les bonnes pratiques surtout quand ce n'est pas plus compliqué. C'est un des buts de ce forum.

Bonsoir J-M-L

C'est ce que je pensais faire, en utilisant, au maximum ce qu'il y avait dans Arduino Référence (sauf les structures (struct), je le concède) ce qui me paraît logique dans un forum Arduino?

J'ai testé ce programme plusieurs heures.

Cordialement
jpbbricole

J'ai testé ce programme plusieurs heures

C'est bien mais mon point n'était pas là... vous avez peut être arrêté 5 secondes ou 5 jours avant que ça ne plante (ou pas).

C'est ce que je pensais faire, en utilisant, au maximum ce qu'il y avait dans Arduino Référence

La doc de référence Arduino est truffée d'erreurs ou d'approximations...

Par exemple allez voir switch...case - Arduino Reference. Ils vont vous dire que les types autorisés sont int et char... ce n'est pas vrai... rien ne vous empêche de mettre un unsigned long (pratique quand on utilise une télécommande IR par exemple) ou autre type qui se traduit en nombre.

Pour l'opérateur sizeof() - Arduino Reference ils donnent un exemple avec une cString et pas la classe string. ils disent que tout type de variable est OK mais n'expliquent pas que si vous faites un sizeof sur une instance de la classe String, vous n'aurez pas la taille du texte...

Et de manière générale, comme tout projet complexe, leur code n'est pas exempt de bugs ou soucis divers, y compris la prochaine version ...

Donc si ceux qui ont un peu de bouteille comme vous peuvent éviter les pièges connus aux nouveaux venus, c'est mieux, non ?

Bonsoir J-M-L

Ca c'est des phrases "bateau", qui ne veulent pas dire grand chose et qui s'adressent aussi à un programme "bien" écrit.
Je vais m'arrêter là et m'en remettrai au feedback de ceux qui utilisent ce que je propose comme solution, donc des amateurs comme moi.

Je n'ai pas de bouteille comme tu dis, je n'ai jamais fait de C, je trouvais ça trop compliqué, je n'ai fait que de l'Arduino, concept qui a nettement popularisé la chose.

Bonne soirée
Cordialement
jpbbricole

ça fait des années que vous jouez avec les Arduino, et vous faites des choses complexes et plutôt bien. Donc vous avez de la bouteille... Je ne sais pas pourquoi vous faites un blocage sur certaines choses ou que vous prenez parfois des commentaires constructifs sur le code comme des critiques personnelles (cf discussion avec d'autres membres).

je n'ai jamais fait de C, je trouvais ça trop compliqué, je n'ai fait que de l'Arduino

ça me fait penser à ... Je suis comme M. Jourdain, je fais de la prose sans le savoir... Vous faites du C++ sans le savoir alors...

bref. vous faites comme vous voulez bien sûr. On a assez pollué ce fil...

Le langage ARDUINO n'existe pas. C'est du C / C++, point final.

Il me semble aussi, mais on dirait que c'est sans espoir :roll_eyes:

Bonsoir hbachetti

Le langage de programmation Arduino peut être divisé en trois parties principales: structures, valeurs (variables et constantes), et fonctions.
,
En effet, c'est sans espoir.

Comme l'a dit @J-M-L, on a assez pollué ce fil.
Si tu veux continuer à en discuter, ouvre un nouveau sujet.

Cordialement
jpbbricole

Comme le langage C / C++. Il n'y a aucune différence.

Le problème est que tu fournis, généreusement il faut l'avouer, du code susceptible de planter à tout moment par méconnaissance profonde de ce qu'est l'allocation dynamique (le tas), et qu'un débutant ne saura pas s'en dépatouiller en cas de problème de fragmentation mémoire.

Sujet déjà ouvert depuis longtemps (févier 2020) :

C'est comme le Port-salut , c'est écrit dessus !

donc comme la doc que vous avez pointé l'indique, le code Arduino c'est du C++

Bonsoir J-M-L

Je ne l'ai jamais contesté, ce que je conteste c'est la négation que Arduino est un langage.
C'est ce type d'énormité que je conteste

Surtout le point final.

Expliqué avec mes mots: l'équipe Arduino a ajouté une "couche" par dessus le C pour le rendre plus "digeste" donc, pour moi peut revendiquer le titre de langage. C'est cet ajout + des cartes "toutes faites" qui fait la popularité du concept et qui permet de développer "sur le coin de la table".

Cordialement
jpbbricole

Non il n'y a pas de surcouche, ni de langage spécifique uniquement des librairies pour simplifier la tâche des débutants. Et un outil qui permet de ne pas devoir déclarer les prototypes des fonctions. Mais on écrit toujours du C/C++.

Maintenant, on va arrêter ces gamineries par que cela devient franchement saoulant ces affrontements de cour d'école qui se poursuivent de fils de discussion en fils de discussion.
C'est un forum d'entraide et pas une cour de récréation de mômes de 5 ans.

déplacé dans le bar.

:wink:

Dit avec mes mots:

L'équipe Arduino a développé un IDE qui permet de gérer simplement le processus de compilation du C++ pour les cartes qu'ils fabriquent (et quelques autres).
Ils fournissent aussi des bibliothèques de fonctions C++ et de classes C++ qui simplifient l'accès au matériel pour éviter que les débutants et créatifs aient à se pencher sur les mystères des registres et gestion d'horloge et autres joyeusetés.

Leur IDE ou des bibliothèques, ça ne fait pas partie du langage. ce sont des outils mis à disposition.

Quand vous écrivez un code pour Arduino, vous programmez en C++, vous appelez le compilateur C++ et vous utilisez leur couche d'abstraction du matériel (qui est aussi du C++).

Le point final est donc tout a fait justifié. le langage c'est le C++, comme dit dans leur documentation.

Trouvez un autre mot que "langage", il n'est pas adapté à ce que vous voulez exprimer — qui est si je le comprends bien que vous vous interdisez de réfléchir à ce que vous faites ou d'envisager qu'il y ait des bugs ou limitations dans les outils fournis par Arduino et que vous vous refusez à prendre une alternative viable à base d'autres bibliothèques standard ou autres techniques bien établies par l'industrie dont Arduino fait partie... En gros, vous refusez d'apprendre et d'ouvrir votre horizon sur la base de "faut surtout pas sortir du cadre"... et ce faisant vous faites passez des mauvaises pratiques à des débutants, ce qui est le point le plus ennuyeux pour moi (si vous souhaitez conserver des bugs dans vos codes, libre à vous, mais ici c'est lu et relu par de nombreux participants, donc c'est normal de ne pas laisser passer des soucis potentiels).

Une simple surcouche d'aide à la compilation, et rien de plus, en aucun cas une surcouche du langage.
Je pense que tout est dit.

Moi aussi.
Ce genre de discussion est pénible surtout quand une personne veut absolument avoir raison devant toutes les autres alors que certaines sont, je ne pense pas me tromper, des grosses, et même de très grosses pointures en langage C/C++.
Même moi, qui dans ce domaine du C n'a que de très petites connaissances j'arrive à faire la différence entre ce qui relève du langage et ce qui relève des bibliothèques de fonctions ou de classes.
Je ne me laisse pas abusé par un Banzi à l'ego démesuré qui finalement n'a fait que copier ou voler le travail de son étudiant Ernesto Baragan, concepteur de Wiring. Comme le prouve le grand nombre de fichiers "du faux langage arduino " dont le nom commence par wiring ou par un w.

C'est lassant, je propose que notre modérateur verrouille le sujet.

je l'ai déplacé dans le bar, donc on peut avoir une discussion de comptoir....

L'avantage du nouveau forum c'est que vous pouvez vous désinscrire des notifications de ce fil.