C embedded - State machine

Utilizarea "State Machine"-ilor (SM) este larg rapandita in programare. Un SM este un automat de stari programat sa execute anumite functii in corelatie cu anumite evenimente si semnale externe.
Decizii de design :
– Reprezentarea evenimentelor
– Reprezentarea starilor
– Reprezentarea tranzitiilor
– Distribuirea evenimentelor catre StateMachine

Metode si modele de creere a unui SM :
– Switch-uri imbricate
– Tabel de stari
– OO State Design Pattern
– Abordare mixta

Cereintele unui SM:
– Intretinerea simpla
– Utilizarea memoriei minimala
– Eficienta

Reprezentarea comuna a unui SM:


Metoda Switch-urilor imbricate
- Starile si evenimentele sunt reprezentate de enumeratii - Cel puțin două niveluri ale declarațiilor de comutare; una pentru expedierea statului, celălalt pentru selectarea semnalului.
- Acțiuni de tranziție sunt puse în aplicare în declarația de comutare a selectarii semnalului

Pro:
– Simpla și pe scară largă instituit
– Amprenta de memorie mică (o singură variabilă care conține starea)
Contra:
– O posibilitate redusă de refolosire a codului
– Distribuirea liniara in timp a evenimentelor si a semnalelor
Exemplu:

typedef enum
{
  SIG_1, /* signal 1 */
  SIG_2 /* signal 2 */
} signal_t;

typedef enum
{
  STATE_1, /* state 1 */
  STATE_2 /* state 2 */
} state_t;

state_t cur_state;
void init(void)
{
  cur_state = STATE_1;
}
void tran(state_t target_state)
{
  cur_state=target_state;
}

dispatch(signal_t signal)
{
  switch(cur_state)
  {
    case STATE_1:
          switch(signal)
          {
             case SIG_1:
               /* trans action */
               tran(STATE_2);
             break;
          }
    break;
    case(STATE_2):
          switch(signal)
          {
             case SIG_1:
               /* trans action */
             break;
             case SIG_2:
               /* trans action */
               tran(STATE_1);
             break;
          }
    break;
  }
}

Etichete

Afișați mai multe

Arhiva

Afișați mai multe