Partage
  • Partager sur Facebook
  • Partager sur Twitter

Machine à états en C

Sujet résolu
    31 mai 2011 à 17:10:20

    Bonjour,

    J'utilise le concept des machines à état en VHDL (langage de description qui permet de programmer la logique d'un FPGA). Ce concept est intéressant dans ce cadre puisque le VHDL permet un vrai parallélisme des actions exécutées. Le but des machines à état et de synchroniser tous ces états.

    http://fr.wikiversity.org/wiki/Kidule_ [...] mme_Ascenseur

    Grâce au lien ci-dessus j'ai récemment vu que l'on pouvait faire des machines à états en C avec une énumération, une boucle while et une structure condition switch-case. Je trouve ce concept particulièrement intéressant, mais je mesure mal sa portée puisqu'en C les instructions sont lues les unes après les autres ce qui n'engendre aucun vrai parallélisme. J'ai cependant l'impression que pour des programmes complexes cette "astuce de programmation" peut être utile dans le sens où il est plus facile à debugger (un état n'effectue qu'une action), plus facile à documenter et plus facile et agréable à lire.

    Cependant j'aimerais savoir si les machines à états peuvent être utilisées systématiquement ou bien si elles sont plus adaptées pour certains types de programmes ou secteurs (robotique) ? :euh:
    • Partager sur Facebook
    • Partager sur Twitter
      31 mai 2011 à 17:21:10

      Bonjour,

      Les FSM (finit state machine) sont applicables dans les problèmes de type "automatisme".

      Il ne faut pas faire l'erreur de vouloir mettre l'FPGA qui est un circuit à architecture programmable et un ordinateur (ou microprocesseur en général) qui sont des structures à fonctionnement programmable dans le même panier.

      Dans le cas de l'FPGA, ton programme est synchronisé sur une entrée horloge (ou autres) sous forme de processus, ce qui est normal vu que ce sont des bascules; tandis que sur un ordinateur, les instructions sont exécutées les unes à la suite des autres (je pense que tu as bien compris cela d'ailleurs).

      Donc le concept est complètement différents.

      Mais il est possible d'implémenter ce concept sur un système type ordinateur sans problèmes. Tout dépend du champs d'application.
      • Partager sur Facebook
      • Partager sur Twitter
        1 juin 2011 à 13:02:18

        Salut,
        Si tu réfléchis bien, dans les FPGA les machine d'état sont en réalités des systèmes séquentiels. En effet à un instant donné tu es dans un seul états et tu va éventuellement transité vers un autre état. Ce concept est donc complètement applicable encode piloté par processeur séquentiel.

        En revanche, les actions à effectuer en fonction des états sont gérés de manière parallèle dans un FPGA mais dans un code informatique elles seront traités de manière séquentiel. C'est la seul différence.

        Pour répondre à la deuxième partie de ta question, les machine d'états sont particulièrement adapté pour piloter des drivers ou des système de séquencement (boucle événementiel etc ...) Ce machines sont également adaptés pour tout ce qui est traitement IA. La liste n'est clairement pas exhaustive. Savoir quand utiliser une machine à état est une question d'intuition.
        • Partager sur Facebook
        • Partager sur Twitter
          1 juin 2011 à 13:27:45

          D'un aute coté, la difference de vitesse entre un ordinateur et un automate, fait que la difference de fonctionnement peut etre negligeable.

          Personnelement, je n'ai vu que rarement des automates exigeant des temps de reponse tres rapide, en l'occurence c'etait un automate programmable par reseaux ou l'on ne pouvais se permettre le moindre affichage pour verifier les trames qu'on lui injectait.
          A l'epoque, on utilisais des 486dx100 maxi, donc avec la puissance de calcul d'aujourd'hui ...
          • Partager sur Facebook
          • Partager sur Twitter
            1 juin 2011 à 14:28:34

            On ne parle pas forcément des temps de réponse, mais des différences de concepts. Bien entendu le temps de réponse est une des conséquences; mais je ne pense pas que le PO s'intéresse ou fasse allusion à cela par ses questions.

            J'ajoute qu'un programme en C peut très difficilement implémenter une structure en pipeline par exemple (voir impossible), alors qu'en FPGA c'est de la rigolade. Encore une fois ça dépend du type de problème qu'on a à résoudre.
            • Partager sur Facebook
            • Partager sur Twitter

            Machine à états en C

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown