Ne Arduino soutien threading?
J'ai un couple de tâches à faire avec arduino, mais l'un d'eux prend beaucoup de temps, j'ai donc pensé à utiliser des threads pour exécuter simultanément.
J'ai un Arduino Mega
[Mise à jour]
Enfin, après quatre ans, je peux installer FreeRTOS dans mon arduino mega. Voici une lien
Vous pouvez utiliser un RÉGULATEUR avec la ArduinoProcessScheduler de la bibliothèque. Il est très proche du réel multitâche. Check it out: github.com/wizard97/ArduinoProcessScheduler
OriginalL'auteur Snake Sanders | 2012-12-22
Vous devez vous connecter pour publier un commentaire.
En bref: NON.
Mais vous pouvez donner un coup de feu au:
http://www.kwartzlab.ca/2010/09/arduino-multi-threading-librar/
OriginalL'auteur Filipe YaBa Polido
Pas encore, mais j'ai toujours utiliser cette Bibliothèque avec de grands projets:
https://github.com/ivanseidel/ArduinoThread
Je place le rappel à l'intérieur d'une Minuterie d'interruption, et voilá! Vous avez des pseudo-threads en cours d'exécution sur l'Arduino...
OriginalL'auteur Ivan Seidel
Juste pour faire de ce fil de discussion plus complète: il y a aussi protothreads qui ont une très petite empreinte mémoire (quelques octets si je me souviens bien) et de préserver les variables locales à fil, très pratique et gain de temps (beaucoup moins des machines à états finis -> code plus lisible).
Des exemples et du code:
arduino-classe /ProtoThreads wiki
Juste pour que vous sachiez quels sont les résultats que vous pouvez attendre: communication série @ 153K6 débit avec des fils de: état des diodes clignotent, l'heure, des fonctions d'évaluation, IO de la manipulation et de la logique, et le tout sur atmega328.
OriginalL'auteur Mr. Girgitt
Pas réel threading mais TimedActions sont une bonne alternative pour de nombreuses utilisations
http://playground.arduino.cc/Code/TimedAction#Example
Bien sûr, si une tâche blocs, les autres aussi, alors que le filetage peut laisser une tâche de gel et les autres continuent...
OriginalL'auteur FrancescoMM
La réponse précédente est correcte, mais l'arduino fonctionne généralement assez rapide, donc si vous avez bien le temps de votre code, il peut accomplir des tâches plus ou moins simultanément.
La meilleure pratique est de faire vos propres fonctions et éviter de mettre trop de code réel par défaut dans le void loop
Je ne pense pas qu'il a été écrit à ce sujet timing sage. Je crois plutôt qu'il faisait allusion à l'organisation fonctionnelle, le fait qu'il est beaucoup plus pratique pour réorganiser le code plus tard (en ajoutant TimedAction ou ArduinoThread plus tard pour le même code, par exemple).
merci - je n'avais pas lu de cette façon, mais maintenant que vous le mentionnez, c'est probablement ce que l'OP voulait dire! Je pense que la mention de "timing" dans la première phrase, à travers moi.
OriginalL'auteur lkrasner
Vous pouvez utiliser arduinos
Il est conçu pour l'environnement Arduino. Caractéristiques:
Je l'utilise quand j'ai besoin de recevoir de nouvelles commandes de bluetooth/réseau/série lors de l'exécution, les anciennes et les anciens l'ont de retard.
Un thread est le serveur thread qui effectue la boucle suivante:
L'autre est la commande thread qui exécute la commande:
OriginalL'auteur eyal
Non, vous ne pouvez pas, mais vous pouvez utiliser la Minuterie d'interruption.
OriginalL'auteur Oshi_007
Arduino ne prend pas en charge la programmation multithread.
Cependant, il ya eu quelques solutions de contournement, par exemple celui de ce projet (vous pouvez l'installer aussi à partir de l'IDE Arduino).
Il semble que vous avez pour définir l'heure de vous-même alors que dans un réel environnement multithread c'est l'OS qui décide de la date de l'exécution des tâches.
Alternativement, vous pouvez utiliser protothreads
OriginalL'auteur Francesco Boi
Arduino n'a pas supporte le filetage. Cependant, vous pouvez faire la prochaine meilleure chose et la structure de votre code autour de l'état des machines de course dans l'entrelacement.
Bien qu'il existe de nombreuses façons de mettre en œuvre vos tâches comme les machines d'état, je recommande cette bibliothèque (https://github.com/Elidio/StateMachine). Cette bibliothèque résumés de la plupart des processus.
Vous pouvez créer une machine d'état en tant que classe comme ceci:
La macro
STATEMACHINE()
résumés de la classe à un héritage, la macroCREATE_STATE()
résumés de l'état wrapper création, la macroINIT_STATE()
résumés de la méthode d'emballage et à la macroSTATE()
résumés état wrapper de référence à l'intérieur de la machine d'état de la classe.De transition d'état est abstrait par
<<
opérateur de la machine d'état de la classe et de l'état, et si vous voulez un retard de transition d'état, tout ce que vous avez à faire est d'utiliser l'opérateur avec un entier, où le nombre entier est le retard dans le millisseconds.À utiliser l'état de la machine, vous devez d'abord instancier. La déclaration d'une référence à la classe dans l'espace global, tandis que l'instanciation avec
new
sur la fonction de configuration pourrait faire l'affaireEnsuite, vous exécutez les états sur la boucle.
OriginalL'auteur Luiz Menezes