Aide Aide programmation Arduino

V

Vik'TheBike

Nouveau
Pour ceux qui aiment les switchs:

void
send(short *to, short *from, int count)
{
int n=(count+7)/8;
switch(count%8) {
case 0:
do { *to = *from++;
case 7: *to = *from++;
case 6: *to = *from++;
case 5: *to = *from++;
case 4: *to = *from++;
case 3: *to = *from++;
case 2: *to = *from++;
case 1: *to = *from++;
} while(--n>0);
}
}
Duff's device!
 
J

JLMa

Apprenti
Moi pareil, largué, si on en revenait aux choses simples...comme GOTO par exemple :axe:

Cdlt Jean-Luc
 
F

furynick

Compagnon
Argh !!!
Goto, surtout pas, jamais ô grand jamais !!
 
F

furynick

Compagnon
Oui oui ... mais sait-on jamais, pour ceux qui le prendrait au 1er :wink:
 
W

wika58

Compagnon
Même des debutants comme moi savent que le Goto est à proscrire... :-D
Et encore jamais vu dans une coirs/tuto/bouquin...

Tiens une question... le language qu'on utilise pour l'Arduino c'est du C ou C++...:7hus5:
 
L

lion10

Compagnon
Bonjour
Concernant le Switch je suis étonné qu'il soit interdit ou déconseillé dans les logiciels durcis, mais l' avionique a sans doute un référentiel plus contraignant. Ce qui n'a sans doute pas été dit c'est qu'il faut toujours prévoir le "case default".

Le "goto" est interdit souvent mais on peut faire des choses structurées et pratiques dans un second temps avec :
- des boucles " do ... while ( xx) ,
- des boucles " while ( yy ).
Selon la condition xx ou yy selon le cas on passera au moins une fois où pas du tout dans la boucle. ( Condition évaluée au début ou à la fin).
Pour aller plus loin " continue" et " break" dans des boucles permettent de sortie ou d'aller à la fin d 'une boucle.

Pour revenir sur la compilation conditionnelle avec "#if" ça peut être intéressant pour gérer des affichages de test et les désactiver une fois une portion de code validée. En supprimant son déroulement le logiciel pourra ne pas être inutilement ralenti sans avoir besoin de supprimer les lignes spécifiques pour tester. (Car bien entendu il y a des bug et la méthode Big bang peut échouer., ..)
Cdlt lion10
 
G

greg_elec

Compagnon
Petit HS :
Dans les années 80 ou je pratiquais le basic j'adorais le (goto y * 100) c'était plus rapide que les if en cascade je sais que c'est très choquant maintenant mais c'était plus simple à écrire que les actuels case je m'y suis fait c'est comme tout
 
F

furynick

Compagnon
le goto c'était la base du Basic, les lignes étaient numérotées dans cet unique but (en tous j'ai aucun souvenir d'à quoi ça aurait pu servir d'autre).

Ceci dit, le principe en lui-même est toujours utilisé aujourd'hui dans la totalité des langages, c'est l'appel à une fonction.

@wika58 : C++, c'est de la POO même si la plupart des projets sont majoritairement procéduraux.
 
J

JLMa

Apprenti
Si je traduis POO par Programmation Orientée Objet, j'ai un bon point ?
 
V

Vik'TheBike

Nouveau
L'IDE Arduino utilise le C++.

Ne pas confondre POO et C++. Le C++ est un langage, qui permet la programmation orientée objet, mais pas que, et n'est pas le seul. ça me semble important, surtout pour que les débutants qui lisent comprennent bien les notions qui sont en jeu.

Pour le swicth interdit, ça m'étonne aussi. La DO-178C ne l'interdit pas en tous cas.
Le "default:" pose parfois problème quand il s'agit d'évaluer la couverture de code, s'il s'agit d'un cas normalement jamais atteint. On le justifie alors par le principe de programmation défensive.
 
V

Vik'TheBike

Nouveau
Même des debutants comme moi savent que le Goto est à proscrire... :-D
Et encore jamais vu dans une coirs/tuto/bouquin...

Tiens une question... le language qu'on utilise pour l'Arduino c'est du C ou C++...:7hus5:
Cherchez "goto statement considered harmful" sur gogol :?:
 
W

wika58

Compagnon
Je connais le Goto du Basic...(appris il y a 40 ans).
Mais dans tout ce que je suis pour le moment (en vue d'apprendre à programmer l'Arduino) je n'ai pas encore vu parler de GOTO... :roll:

Et comme le sujet de ce post est la programmation Arduino... :-D
 
V

Vik'TheBike

Nouveau
Je connais le Goto du Basic...(appris il y a 40 ans).
Mais dans tout ce que je suis pour le moment (en vue d'apprendre à programmer l'Arduino) je n'ai pas encore vu parler de GOTO... :roll:

Et comme le sujet de ce post est la programmation Arduino... :-D
Tu ne le verras peut-être pas. Dire que goto c'est le Mal est un peu exagéré, c'est comme dire que Windows c'est de la merde.
C'est une instruction qui te permet de "brancher", en français créer une branche dans le fil d'exécution de ton programme. Effectivement, quand il y en a partout, ça rend le code illisible (on en perd le fil). De surcroit, en C++ on n'en a plus vraiment besoin.
 
W

wika58

Compagnon
Et comme on parle sur ce post d'aide des debutants en C++ dans la section Arduino du forum... je me demande pourquoi il y a tant de msg à ce sujet...:???:

Ce qui caractérise notre forum est l'entraide... pas l'embrouillage du non-sachant...
 
W

wika58

Compagnon
Petite nouvelle question de débutant pour revenir dans le sujet:

Sous IDE 2.xy, quelles sont les possibilités de Debugging pour mettre au point ses développements ? :smt100

Je précise bien avec Arduino IDE 2.xy.... J'ai bien vu que sur d'autres plateformes il y avait des outils performants... Et je ne dit pas que je n'y passerai pas un jour mais aujourd'hui j'apprends et avec IDE 2...

D'avance merci pour votre aide.
 
Dernière édition:
C

coredump

Compagnon
Pour info en C le switch est une suite de goto!
C'est pour ça que le duff's device fonctionne.
Allez un truc utile pour la s débutants

Généralement on déconseille de mettre des return un peu partout dans une fonction, car ça devient vite illisible.

On fait donc:

int plop(int plip)
{
int ret = -1;
do {
....
if (error) {
break;
}
....
if (error2) {
break;
}
} while (false);
return ret;
}

Les avantages: par défaut on retourne la valeur initialisée.
Il n'y a qu'un point de retour et c'est donc plus simple pour faire du traitement d'erreur.
 
W

wika58

Compagnon
Merci :smileJap:
Pas encore tout compris mais je vais m'appliquer.
 
F

furynick

Compagnon
c'est comme dire que Windows c'est de la merde.
Y'a pourtant une époque où c'était largement vrai :siffle:

Petite nouvelle question de débutant pour revenir dans le sujet:

Sous IDE 2.xy, quelles sont les possibilités de Debugging pour mettre au point ses développements ? :smt100
A ma connaissance aucune mais ce n'est pas vraiment la faute de l'IDE en soi mais plus des cartes Arduino elles-même qui n'avaient pas d'interface de debug jusqu'à récemment.

Avec les nouveaux µC 32bits on voit apparaitre des JTAG sur les cartes mais il faut un matériel spécifique pour pouvoir l'utiliser.
J'ai vu que sur Wokwi le debug était dispo en beta. Pour des programmes relativement simples qui ne nécessite pas du matériel qui ne serait pas supporté par Wokwi ça peut peut-être aider.
 
W

wika58

Compagnon
Ben je me suis peut-être mal exprimé (débutant) au sujet d'un outil de Debug...

Quand j'avais fait mes premiers pas en Arduino (il y a une demi-douzaine d'année) je me rappelle qu'on pouvait mettre des points d'arrêt et aller lire des valeurs de variable...
Ce serait déjà ça...

Je continue mes recherches...
 
F

furynick

Compagnon
J'ai jamais vu de moyen de faire du debug avec l'IDE Arduino et ça doit faire au moins aussi longtemps que toi que j'ai mis le nez dedans ... j'aurais raté un truc aussi gros ?

Il y a une époque où il y a eu des émulateurs qu'on pouvait faire tourner dans du éclipse je crois mais en dehors de ça je vois même pas comment ça serait possible.
 
G

greg_elec

Compagnon
le goto y*100 venais de l'assembleur 8080 ou on avait des sauts calculés je ne me souviens plus de la syntaxe mais je l'ai utilisé
 
F

fredcoach

Compagnon
Le goto existe en C parce qu'il peut s'avérer utile, notamment pour un traitement d'erreur.
Cependant, il faut vraiment être sûr de ce qu'on fait et je ne saurais trop conseiller aux débutants de le bannir.
 
F

fredcoach

Compagnon
Pourquoi en parlez-vous tant alors sur un post où des débutants demandent de l'aide...:mad: :hang:
Parce qu'il me semble, si on veut vraiment les aider, qu'il faut leur expliquer aussi bien que ça existe (et pourquoi) et qu'il vaut mieux qu'ils évitent de s'en servir. De même qu'on explique aux débutants sur une machine comment on peut s'en servir et ce qui est dangereux.
 

Sujets similaires

W
Réponses
122
Affichages
10 921
Philippe85
Philippe85
N
Réponses
3
Affichages
840
jpbbricole
jpbbricole
lolo
Réponses
0
Affichages
445
lolo
T
Réponses
1
Affichages
224
Teddy55
T
D
Réponses
0
Affichages
240
dodochef
D
osiver
Réponses
14
Affichages
37 576
osiver
osiver
Dudulle
Général langage MMBASIC
Réponses
8
Affichages
1 052
Dudulle
Dudulle
J
Réponses
12
Affichages
544
Robert
R
P
Réponses
33
Affichages
17 629
wika58
W
T
Réponses
2
Affichages
26 906
Tristan l'apprenti
T
esloch
Réponses
0
Affichages
353
esloch
esloch
altitude
Réponses
21
Affichages
2 891
laboureau
laboureau
laurenttanguy
Réponses
0
Affichages
560
laurenttanguy
laurenttanguy
Haut