日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

有限状态机FSM和层次状态机HSM

發(fā)布時間:2023/12/15 综合教程 35 生活家
生活随笔 收集整理的這篇文章主要介紹了 有限状态机FSM和层次状态机HSM 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

  就單片機(jī)而言,程序可以分為兩類:帶操作系統(tǒng)的程序和前后臺程序;前后臺程序從架構(gòu)上又分為順序機(jī)和狀態(tài)機(jī)。

  廣義地說, 任何一個程序都是一個狀態(tài)機(jī), 因為它總是要記住一些狀態(tài), 然后根據(jù)輸入進(jìn)行輸出。 狹義上說,狀態(tài)機(jī)不是指隨隨便便的一個程序, 而是指某一類程序, 也就是狀態(tài)機(jī)編程程序。

FSM

  簡單講就是將行為分為一個一個的狀態(tài),狀態(tài)與狀態(tài)之間的過渡通過事件的觸發(fā)來形成。比如士兵的行為有“巡邏”,“追擊敵人”,“攻擊敵人”,“逃跑”等行為,響應(yīng)的事件就有“發(fā)現(xiàn)敵人”,“追到敵人”,“敵人逃跑”,“敵人死亡”,“自己血量不足”等。那么可以寫成這樣一個狀態(tài)機(jī):

  1.士兵 “巡邏”,如果 “發(fā)現(xiàn)敵人”,那么,“追擊敵人”

  2.士兵 “追擊敵人”, 如果 “追到敵人”, 那么,“攻擊敵人”

  3.士兵 “追擊敵人”, 如果 “敵人死亡”, 那么,繼續(xù) “巡邏”

  4.士兵 “攻擊敵人”, 如果 “敵人死亡”, 那么,繼續(xù) “巡邏”

  5.士兵 “攻擊敵人”, 如果 “血量不足”, 那么,“逃跑”

  其中,士兵就是這個FSM的執(zhí)行者,紅色的就是狀態(tài),藍(lán)色的就是事件,整個狀態(tài)機(jī)的行為可以總結(jié)為:當(dāng)前狀態(tài)=>是否滿足條件1,如果是,則跳轉(zhuǎn)到對應(yīng)狀態(tài),否則=>是否滿足條件2,如果是,則跳轉(zhuǎn)到對應(yīng)狀態(tài)。

  由此可看出,狀態(tài)機(jī)是一種“事件觸發(fā)型”行為,就是只有事件的觸發(fā)才會發(fā)生引起狀態(tài)的變化。

HSM

  簡單來說,就是FSM當(dāng)狀態(tài)太多的時候,不好維護(hù),于是將狀態(tài)分類,抽離出來,將同類型的狀態(tài)做為一個狀態(tài)機(jī),然后再做一個大的狀態(tài)機(jī),來維護(hù)這些子狀態(tài)機(jī)。

  舉個決策小狗行為的例子:我們對小狗定義了有很多行為,比如跑,吃飯,睡覺,咆哮,撒嬌,搖尾巴等等,如果每個行為都是一個狀態(tài),用常規(guī)狀態(tài)機(jī)的話,我們就需要在這些狀態(tài)間定義跳轉(zhuǎn),比如在“跑”的狀態(tài)下,如果累了,那就跳轉(zhuǎn)到“睡覺”狀態(tài),再如,在“撒嬌”的狀態(tài)下,如果感到有威脅,那就跳轉(zhuǎn)到“咆哮”的狀態(tài)等等,我們會考量每一個狀態(tài)間的關(guān)系,定義所有的跳轉(zhuǎn)鏈接,建立這樣一個狀態(tài)機(jī)。如果用層次化的狀態(tài)機(jī)的話,我們就先會把這些行為“分類”,把幾個小狀態(tài)歸并到一個狀態(tài)里,然后再定義高層狀態(tài)和高層狀態(tài)中內(nèi)部小狀態(tài)的跳轉(zhuǎn)鏈接。

  其實層次化狀態(tài)機(jī)從某種程度上,就是限制了狀態(tài)機(jī)的跳轉(zhuǎn),而且狀態(tài)內(nèi)的狀態(tài)是不需要關(guān)心外部狀態(tài)的跳轉(zhuǎn)的,這樣也做到了無關(guān)狀態(tài)間的隔離,比如對于小狗來說,我們可以把小狗的狀態(tài)先定義為疲勞,開心,憤怒,然后這些狀態(tài)里再定義小狀態(tài),比如在開心的狀態(tài)中,有撒橋,搖尾巴等小狀態(tài),這樣我們在外部只需要關(guān)心三個狀態(tài)的跳轉(zhuǎn)(疲勞,開心,憤怒),在每個狀態(tài)的內(nèi)部只需要關(guān)心自己的小狀態(tài)的跳轉(zhuǎn)就可以了。這樣就大大的降低了狀態(tài)機(jī)的復(fù)雜度,另外,如果覺得兩層的狀態(tài)機(jī)還是狀態(tài)太多的話,可以定義更多的狀態(tài)層次以降低跳轉(zhuǎn)鏈接數(shù)。

  QP就是一個面向MCU,面向并發(fā)的層次式狀態(tài)機(jī)模型。有人稱量子平臺QP(Quantum Programming)叫作量子編程(Quantum Programming),也叫狀態(tài)機(jī)編程。

參考文獻(xiàn)

http://www.cnblogs.com/jeason1997/p/5140201.html

總結(jié)

以上是生活随笔為你收集整理的有限状态机FSM和层次状态机HSM的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。