Picproje Elektronik Sitesi

SERBEST BÖLGE => Programlama ve Algoritma => Konuyu başlatan: fgokcegoz - 09 Haziran 2014, 00:06:05

Başlık: State Machine vs RTOS
Gönderen: fgokcegoz - 09 Haziran 2014, 00:06:05
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 ?
Başlık: Ynt: State Machine vs RTOS
Gönderen: picusta - 09 Haziran 2014, 01:37:32
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.