介紹一個(gè)超級(jí)實(shí)用的編程思想——狀態(tài)機(jī)
本篇來再來介紹狀態(tài)機(jī),狀態(tài)機(jī)在嵌入式軟件開發(fā)中,是一個(gè)比較實(shí)用的編程思想,下面來介紹狀態(tài)機(jī)的一些知識(shí)點(diǎn),文末推薦閱讀中有之前介紹過的一些狀態(tài)機(jī)編程實(shí)現(xiàn)的實(shí)例。
一、狀態(tài)機(jī)要素可以把狀態(tài)機(jī)的要素分為4個(gè)要素,即:現(xiàn)態(tài)、條件、動(dòng)作、次態(tài)。“現(xiàn)態(tài)”和“條件”是因,“動(dòng)作”和“次態(tài)”是果。
(1)現(xiàn)態(tài):是指當(dāng)前所處狀態(tài);
(2)條件:又稱為“事件”。當(dāng)條件被滿足時(shí),將會(huì)觸發(fā)一個(gè)動(dòng)作,或者執(zhí)行一次狀態(tài)的遷移。
(3)動(dòng)作:條件滿足后執(zhí)行的動(dòng)作。動(dòng)作不是必須的,當(dāng)條件滿足后,也可以不執(zhí)行任何動(dòng)作,直接遷移到新狀態(tài)。
(4)次態(tài):條件滿足后要遷移往的新狀態(tài)?!按螒B(tài)”是相對(duì)于“現(xiàn)態(tài)”而言的,“次態(tài)”一旦被激活,就轉(zhuǎn)變成新的“現(xiàn)態(tài)”了。
二、狀態(tài)遷移圖(STD)(1)狀態(tài)框:用方框表示狀態(tài),包括所謂的“現(xiàn)態(tài)”和“次態(tài)”;
(2)條件及遷移箭頭:用箭頭表示狀態(tài)遷移的方向,并在該箭頭上標(biāo)注觸發(fā)條件;
(3)節(jié)點(diǎn)圓圈:當(dāng)多個(gè)箭頭指向一個(gè)狀態(tài)時(shí),可以用節(jié)點(diǎn)符號(hào)(小圓圈)連接匯總;
(4)動(dòng)作框:用橢圓框表示;
(5)附加條件判斷框:用六角菱形框表示;
三、狀態(tài)遷移表首先我們畫出他的狀態(tài)遷移圖:
然后我們畫出狀態(tài)遷移表:
注意使用狀態(tài)機(jī)的時(shí)候不要出現(xiàn)兩種錯(cuò)誤:1、“偽態(tài)”2、“漏態(tài)” (1)“偽態(tài)”:把某個(gè)“程序動(dòng)作”當(dāng)成一種“狀態(tài)”來處理。(2)“漏態(tài)”:在狀態(tài)劃分時(shí)漏掉一些狀態(tài)。
PS:
區(qū)分狀態(tài)和偽態(tài):(看兩者的本質(zhì)) “動(dòng)作”是不穩(wěn)定的,即使沒有條件的觸發(fā),“動(dòng)作”一旦執(zhí)行完畢就結(jié)束了;“狀態(tài)”是相對(duì)穩(wěn)定的,如果沒有外部條件的觸發(fā),一個(gè)狀態(tài)會(huì)一直持續(xù)下去。
六、更復(fù)雜的狀態(tài)機(jī)前面介紹的是一種簡單的狀態(tài)結(jié)構(gòu)。它只有一級(jí),并且只有一維,它的結(jié)構(gòu)圖如下所示:
如果有必要,我們可以建立更復(fù)雜的狀態(tài)機(jī)模型。如:
1、多級(jí)狀態(tài)結(jié)構(gòu)。狀態(tài)機(jī)可以是多級(jí)的。在分層的多級(jí)狀態(tài)機(jī)系統(tǒng)里面,一個(gè)“父狀態(tài)”下可以劃分多個(gè)“子狀態(tài)”,這些子狀態(tài)共同擁有上級(jí)父狀態(tài)的某些共性,同時(shí)又各自擁有自己的一些個(gè)性。
狀態(tài)機(jī)也可以是多維的。從不同的角度對(duì)系統(tǒng)進(jìn)行狀態(tài)的劃分,這些狀態(tài)的某些特性是交叉的。比如,在按照按鍵和顯示劃分狀態(tài)的同時(shí),又按照系統(tǒng)的工作進(jìn)程做出另一種狀態(tài)劃分。這兩種狀態(tài)劃分同時(shí)存在,相互交叉。從而構(gòu)成了二維的狀態(tài)結(jié)構(gòu)空間。
說明一下,每一維的狀態(tài)都需要用一個(gè)狀態(tài)變量(寄存器)來表示。
最后我想說一下:不管是什么樣子的程序?qū)懗蔂顟B(tài)機(jī),只有一個(gè)原則,那就是簡單的才是最有效的!!
轉(zhuǎn)自:https://www.cnblogs.com/lisongzzx/p/13641206.html*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。