State Machine vs RTOS

Başlatan fgokcegoz, 09 Haziran 2014, 00:06:05

fgokcegoz

Merhaba,

state machine yapısı ile kurduğunuz bir yazılım algoritmasını, RTOS ortamında yapmaya çalışırken nasıl bir yöntem izlemeyi tavsiye ederdiniz ?

Mesela durumlar arası geçişi RTOS suz ortamda switch - case yapısı ile kontrol ediyoruz, burası tamam. Peki aynı durumları RTOS lu ortamda da mı yine aynı şekilde switch-case yapısı ile kontrol edeceğiz yoksa label lar kullanarak mı geçişi sağlayacağız ?
"Vicdanın ziyası, ulûm-u diniyedir. Aklın nuru, fünun-u medeniyedir. İkisinin imtizacıyla hakikat tecelli eder." (Bediüzzaman Said Nursi)

picusta

Her task'in ayri state'i olabilir, belli bir isi yapacak çünkü.
önce bir olayin gelmesini bekleyeceksin.
sonra gelen olayi hangi durumda olduguna göre degerlendireceksin.

Su asagidaki yapi windows olsun, RTOS olsun isini görür.
typedef enum ENU_STATE  ... STA_xx, STA_yy ..   // durumlarin listesi

typedef enum ... EVT_xx, EVT_yy  ...                   // Olaylarin listesi


ENU_STATE  m_state;

EvtList = {...} ;

while(!EndTask)
{
Evt = WaitForEvent(EvtList);  // Bir olay olmasini bekle (Idle)
switch (m_state)        // önce hangi durumda olduguna bak
   {
   case STA_xx:
      switch (Evt)                  // Bu durumda iken hangi olay gelmis oluduguna bak.
        {
         case EVT_xx:
              // Action 
              OUTPUT1 = dd;

              //  Durum degistir, istersen bir iki kontrol yap önce.
              if (...)   m_state = STA_yy;

             break;

         case EVT_yy:
             break;
         }
  break;
case STA_yy:
  break;
}
}


Daha janjanli yapmak istersen,generic bir sekilde fonksyon matrisi yapabilirsin (Durumlar satir, olaylar sütun örnegin).
Mantik :  Bu durumdayim, bu olay geliyor,  su fonksyonu çagriyorum (veya birsey yapmiyorum), gibisinden.