Programmation PIC en C et machine d'état ?
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

Programmation PIC en C et machine d'état ?



  1. #1
    alexglvr

    Programmation PIC en C et machine d'état ?


    ------

    Bonjour,

    je travail sur un projet utilisant la TCP/IP stack de microchip.

    Afin de partager les ressources du PIC? toutes les fonctions sont codées sous la forme de machine d'état (Switch/case)

    j'aimerais comprendre comment cela fonctionne exactement.

    Considérons deux fonctions de type machine d'état :

    Code:
    void toto_fct(void)
     {
         static enum _totoState
         {
             toto1 = 0,
             toto2,
             toto3,
             toto4,
         } totoState = toto1;
     
         switch(totoState)
         {
             case toto1:
                 // Create a socket for this server to listen and accept connections on
                 if(...)
                     return;
                 totoState = toto2
    break;
     
             case toto2:
                 //bind to a local port
                 PORTB = 0x00;
                PORTC = 0xFF;
                 if(....)
                     return;
                 
                 totoState = toto3;
           break;
              
           case toto3:
                 if(..)
                     return;
                 totoState = toto4;
           break;
              
           case toto4:
                    ...
                 break;
              
             default:
                 return;
         }
         return;
     }
    et

    Code:
    void titi_fct(void)
     {
         static enum _titiState
         {
             titi1 = 0,
             titi2,
             titi3,
             titi4 ,     
    } titiState = titi1;
     
         switch(titiState)
         {
             case titi1:
                 if(...)
                     return;
                 titiState = titi2;
                 break;
     
             case titi2:
                 //bind to a local port
                 PORTB = 0x00;
                 PORTC = 0xFF;
                 if(....)
                     return;
                 
                 titiState = titi3;
          break;
              
           case titi3:
                 if(...)
                     return;
                 titiState = titi4;
          break;
              
           case titi4:
                    ...
                 break;
              
             default:
                 return;
         }
         return;
     }
    Elles sont appelées par le main de la façon suivante :

    Code:
    …
         while(1)
         {
            toto_fct();
            titi_fct();
          }
    je vois deux fonctionnements possibles:

    1.
    - on rentre dans la boucle while, et la fonction toto_fct est exécutée.
    - admettons que la machine d'état avance jusqu'à toto3, ou le test if renvoie true, ce qui a pour conséquence d'exécuter return et de quitter la fonction.
    - la fonction titi_fct() est donc exécutée à son tour. Elle atteint l'état titi2 avant d'être quittée..
    - la boucle while est terminée, elle est donc réexecutée.
    - la fonction toto_fct est reexecutée à partir de l'état toto3, et son État avance autant que possible avant d'être quittée.
    - la fonction titi_fct est relancée à partir de titi2, et ainsi de suite...

    OU

    2.
    - on rentre dans la boucle while, et la fonction toto_fct est exécutée.
    - admettons que la machine d'état avance jusqu'à toto3, ou le test if renvoie true, ce qui a pour conséquence d'exécuter return et de quitter la fonction.
    - la fonction titi_fct() est donc exécutée à son tour. Elle atteint l'état titi2 avant d'être quittée..
    - la boucle while est terminée, elle est donc réexecutée.
    - la fonction toto_fct est reexecutée à partir du début (initialisation des vars, état toto1, ....)...
    - la fonction titi_fct est reexecutée à partir du début (initialisation des vars, etat titi1, ....)...

    Laquelle de ces procédures est la bonne?

    Merci de votre aide,

    Alexandre

    -----

  2. #2
    alexglvr

    Re : Programmation PIC en C et machine d'état ?

    juste pour remonter le sujet...

  3. #3
    Jack
    Modérateur

    Re : Programmation PIC en C et machine d'état ?

    Vu que les variables qui mémorisent l'état des 2 machines sont déclarées "static", leur valeur n'est pas réinitilisée.

    J'opte donc pour la solution 1.

    A+

Discussions similaires

  1. programmation de PIC
    Par invite5c627463 dans le forum Électronique
    Réponses: 6
    Dernier message: 23/06/2009, 15h35
  2. Programmation pic
    Par invite2cf73f7f dans le forum Électronique
    Réponses: 5
    Dernier message: 17/04/2009, 16h47
  3. Machine d'état pour PLL en vhd
    Par invite60d8b4ec dans le forum Électronique
    Réponses: 0
    Dernier message: 03/04/2009, 23h03
  4. erreur 0X00 programmation PIC plus questions sur les PIC
    Par invite4a8ccabd dans le forum Électronique
    Réponses: 4
    Dernier message: 22/07/2007, 14h36
  5. Notion d'état primitif et d'état dérivé...
    Par julien_4230 dans le forum Biologie
    Réponses: 3
    Dernier message: 18/09/2005, 12h14
Découvrez nos comparatifs produits sur l'informatique et les technologies.