Suite a la lecture d'un tuto de Barbudor sur le protocole de comunication,j'ai lu ceci:
En effet, ceux qui ont eu la curiosité de regarder le code de la bibliothèque core de l'Arduino se
sont aperçu qu'il y a une fonction main() écrite de la façon suivante :
void main()
{
setup();
while(1)
loop();
}
Il est important de se rappeler que l'absence d'un système multi-tâche impose que les tâches
coopèrent entre-elles. Aucune tâche ne doit se bloquer en attente d'un événement et ainsi
monopoliser le processeur pour elle toute seule, empêchant d'autre tâche de s'exécuter. Les
appels à delay() sont a proscrire. Les boucles trop longues sont a découper en petits
morceaux. Chaque tâche doit être découpée en sous-tâches élémentaires qui seront exécutée
depuis la boucle (loop) de l'Arduino. Chaque tâche est responsable de séquencer ses soustaches
élémentaires et de rendre la main à la boucle aussi souvent que possible pour
permettre l'exécution des autres tâches.
Une bonne méthode pour ce type de fonctionnement est d'implémenter les taches sous la
forme de machines d'état.
Ainsi pour rentrer dans le "cadre" Arduinon chaque tâche doit fournir au moins une fonction de
setup() pour l'initialisation et une fonction de loop(). Le code global de l'application peut
ainsi s'écrire :
void setup()
{
task1_setup();
task2_setup();
task3_setup();
}
void loop()
{
task1_loop();
task2_loop();
task3_loop();
}
[/quote]
Je voudrais bien quelle que explication et exemples sur le fonctionnement sur Task1-setup() et le loop car je ne comprends par.
Bonjour a toi, alors je vais éssayer de t'éxpliquer ça un peut plus simplement alors:
Le micro controleur lis les ligne de code une par une ( une seul tache par une seule tache )
=> ligne 1
ligne 2
ligne 3
etc...
Donc pour organisé le code on utilise une fonction setup{ } dedans on y introduit les ligne d'initialisation celle qui ne ce ferons qu'une fois en début de programme, initialisation I/O ou ethernet serial etc..
En suite on trouve la boucle loop { } fonction dans la quel on introduit les lignes répétitive, en effet loop ce repete à l'infini.
bref quand on est plus proche du langage on à une fonction main{ } et tout dedans et on fait son loop tout seul ^^ mais la c'est fait pour vous simplifier la vie donc autant s'en servir et bien séparé init et fonctionnement établie.
Pour simplifier encore le code il est conseiller de re diviser le code en sous fonction pour les grosse partie, ceci pour des raison de lisibilité et de simplification, certes plus long à écrire mais beaucoup moins a dépanné ^^
Les take_setup{} n’existe pas il aurait pu écrire allumer_lumiere{ } et eteindre_lumiere{ }ça aurais été pareil c'est pour l'éxemple
Merci pour les explications, je fais déjà de skech sous Arduino, mais ce que je ne comprends pas au niveau fonctionnement c'est de lancer une task1_setup () dans la partie Void setup (que peux-tu mettre dedans) et le task1_loop dans l’autre partie.
Pour moi dans la première partie je défini le paramètre de serial ou des pins avec leurs états etc….Alors pourquoi une task ???
J'ai du mal à comprends que je démarre une tache d'un cote (setup) et je boucle l''autre partie du programme avec la task_loop
Apres pour le nom, comme tu le dit, je lui donne n’importe quoi.
C’est pour quoi, avec un exemple je pourrais comprends plus facilement.
C'est juste que l'exemple utilise des fonctions pour ne pas avoir trop de choses dans les fonctions setup et loop. ça permet de découper les problèmes et de rendre le code plus clair en l'organisant.
On peut prendre l'exemple d'un système qui envoie des mesures de température issues d'un capteur et horodatées.
Les fonctions task1_setup, task2_setup et task3_setup configurent les péripéhriques :
task1_setup : configuration de l'horloge ;
task2_setup : configuration du capteur ;
task3_setup : configuration de la liaison série.
Ensuite les fonctions task1_loop, task2_loop et task3_loop utilisent ce qui a été configuré précédemment :
task1_loop : lecture de l'heure sur l'horloge ;
task2_loop : lecture de la température sur le capteur ;
task3_loop : envoi des mesures horodatées sur la liaison série.
Merci pour ce complément d'information, je comprends un peu mieux le mécanisme.
Aurais-tu un exemple avec un serial ou lm35 voir autre chose ?pour que je teste cette méthode avec d'autre programme que j'ai fait pour la compréhension.
Je n'ai pas d'exemple sur ce sujet, la seule chose importante à comprendre est la notion de fonction. Le mieux est de l'appliquer à tes propres programmes, ce sera la meilleure illustration pour toi