1. 程式人生 > >狀態機相關 程式設計 資料 收集

狀態機相關 程式設計 資料 收集

狀態機 QP

寫狀態機時,還是很煩的,覺得PT在這個方面最直觀,但在一些特定領域並不合適。
QP也是大家比較推崇的,但是感覺有點大(至少我覺得),剛好逛github碰到一個叫SM的庫,
據說是模仿QP的,看起來感覺不錯,就改寫了一點,在windows下寫了個demo,覺得在arm下也應該是一樣的,

原作者地址
https://github.com/leijian001/sm
原始碼
之前用過不少pt,感覺挺好,也沒出過什麼問題,不知道這個怎麼樣,下載看看

這個最簡狀態機框架可以這樣用:

  • 定義一個FSM,再定義這個FSM的一個通用訊息變數Evt,把FSM+Evt封裝起來,這樣就得到一個AO,然後程式裡可以有多個AO,它們互相通過傳送訊息進行協作。
  • 每個AO再增加一個定時器訊息變數EvtTimer,可以實現延時動作。

由於訊息變數Evt可以看成是長度為1的佇列,所以AO可能丟失訊息。但如果把Evt擴充套件為長度大於1的佇列,就又回到QPN的完整設計。

所以,簡單的專案可以用這個框架,實際工程裡建議直接用QPN框架,它基本功能都齊了。

(稍後補充)