乙個串列埠接收資料的狀態機

2021-06-15 01:22:49 字數 831 閱讀 4281

關於串列埠接收轉義字元狀態機:

s1——s2——s3——s4——s5

s1空閒狀態,收到第乙個開始前導符,跳轉到s2;

s2收到第乙個開始前導符狀態,收到開始第二個前導符,跳到s3;收到其他資料,跳轉到s1;

s3收到第二個開始前導符狀態,收到其他資料進行接收,跳轉到s3;收到第乙個結束前導符,跳轉到s4;

s4收到第乙個結束符狀態,收到其他資料進行接收,跳轉到s3;收到第二個結束符,跳轉到s5;

s5結束狀態,關閉接收,重置狀態,標識接收結束。

這裡設計了乙個串列埠接收資料用的狀態機。

根據資料的前導符和結束符,以及轉義字元,進行資料接收。

在本狀態圖中,整體實現了在接收過程中,去掉資料的前導符,結束符以及轉義字元。但是留下了乙個可能造成狀態圖宕機或者將前導字元接收到緩衝區的bug。

如果這裡start char == end char,second start char != second end char,當進入recvpreambleend後,如果接收到start char將導致接收錯誤。因為對於資料而言如果發生這樣的事情,說明是新的一幀到了。

同時在實現段**的時候同樣,出現了乙個隱藏的bug,當接收到second char後,要進行退出前的清理操作,應該是在當前接收時間內進行。但實現時,將其放在了下一次接收到來時處理,這就發生了非同步資料處理的現象。雖然表面上正常,資料有互動,實際上對於使用這段**的接收方,只處理了一半的資料。剩下的一半資料,被接收端丟棄了。

這些前乙個是設計上的缺陷,後乙個是編碼上的缺陷。

OpenGL是乙個狀態機

顏色 紋理座標 源因子和目標因子 光源的各種引數,等等,這些都是狀態,所以這一句話就包含了上面敘述的所有內容。此外,是否啟用了光照 是否啟用了紋理 是否啟用了混合 是否啟用了深度測試 等等,這些也都是狀態,也符合上面的描述 opengl會保持狀態,除非我們呼叫opengl函式來改變它。取得openg...

乙個簡單的狀態機總結

工作中乙個簡單的狀態機實現,總結如下。定義狀態 public enum qstate public int getcode public enum vstate public int getcode public enum state public int getcode public int ge...

人生就是乙個狀態機

從出生到死亡人生走的是乙個過程。從巨集觀來看,人分為幼年 青年 中年和老年 從微觀來看,人每天吃飯 睡覺 學習 工作和娛樂。古語有云 良田千傾不過一日三餐,廣廈萬間只睡臥榻三尺 沒必要我一己私利而貪得無厭。而我看來人生就如同乙個大型狀態機。人生的狀態機從大的方面看,它的輸入為時間,輸出為做出的成果,...