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 ?
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.